[FUNC]在AHK中实现Pyhton的range函数

用AutoHotkey V1 实现了Python中的range,用以辅助实现for循环,弥补AutoHotkey中没有for循环的缺憾。

本文是用AutoHotkey复刻Python的range函数

函数语法:

range(start, stop, step)

参数说明:

输出说明:

range(6) ; 从 0 开始到 5 [0, 1, 2, 3, 4, 5]
range(0,6) ; 从 0 开始到 5 [0, 1, 2, 3, 4, 5]
range(1, 11) ;从 1 开始到 10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range(0,10,2) ; 从 0 开始到10的偶数 [0, 2, 4, 6, 8]
range(0, 10, 3) ; 步长为 3 [0, 3, 6, 9]
range(0, 30, 5) ; 步长为 5 [0, 5, 10, 15, 20, 25]

range(1, 0) ;[1]
range(25, 2, -2) ; [25 ,23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3]
range(0, -10, -1) ; 负数 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

range(0) ; []

支持字母表输出,特别说明——字母型且步长为1情形,是包含stop的。

range("a","e") ; ["a","b","c","d","e"]

range("e") ; ["a","b","c","d","e"]

range("A", "Z") ;输出A-Z

range("a", "z")) ;输出a-z

range("A", "z") ;输出A-Z [ \ ] ^ _ ` a-z

/*
版权声明:本文为CSDN博主「liuyukuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuyukuan/article/details/128704747
功能:根据给定的范围和步长,返回一个整数列表(可用于for循环索引),如果给定的是字母则返回字母表。
参数说明:
start 计数从 start 开始。默认是从 0 开始。例如:range(6)等价于range(0,6)。
stop  计数到 stop 结束,但不包括 stop。例如:range(0,6) 是[0,1,2,3,4,5]没有6
step  步长,默认为1。例如:range(0, 6) 等价于 range(0, 6, 1)
*/
range(start:=0,end:="-0",step:=1) {
    ret := []
    if(start+0!=start)
    {
        stringFlag:=true
        start:=Asc(start)
        
        if (end =="-0" ) {
            ;大写字母
            if(start>=65 and start<=90)
            {
                end := start
                start := 65
            }
            ;小写字母
            if(start>=97 and start<=122)
            {
                end := start
                start := 97
            }
        }else{
            end:=Asc(end)
        }
    }
        
    if (start == 0 && end == 0) {
        return ret
    }
    if (step == 0) {
        zeroStepFlag := true
    }
    if (end =="-0" ) {
        end := start
        start := 0
    }
    l_currentStep := start
    ; where step is 0, end at the array count
    if (zeroStepFlag == true) {
        loop, % end - 1 {
            ret.push(l_currentStep)
            l_currentStep +=step
        }
        return ret
    }
    if(end>start)
    {
        ;递增
        if(step<0)
            step := -step
        while (l_currentStep < end) {
            if(stringFlag==true)
                ret.push(chr(l_currentStep))
            else
                ret.push(l_currentStep)
            l_currentStep += step
        }
    }
    if(end<start){
        ;递减
        if(step>0)
            step := -step
        while (l_currentStep > end) {
            if(stringFlag==true)
                ret.push(chr(l_currentStep))
            else
                ret.push(l_currentStep)
            l_currentStep += step
        }
    }
    if(stringFlag==true and abs(step)==1)
        ret.push(chr(end))
    return ret
}    

}
————————————————
版权声明:本文为CSDN博主「liuyukuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuyukuan/article/details/128704747

给TA捐赠
共{{data.count}}人
人已捐赠
AHKV1教程案例

GUI编程中的v标签、g标签示例

2023-1-15 18:51:05

AHKV1其他应用

ahkinfo1.3.6

2023-1-20 11:44:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索