Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python范围步长不可能使用枚举_Python - Fatal编程技术网

python范围步长不可能使用枚举

python范围步长不可能使用枚举,python,Python,仍处于学习Python的早期阶段。我使用range()函数编写了一小段代码: str = "horizon" # method 2 def printStrInt(): #print("length of str ",len(str)) for i in range(0,len(str)-1,2): #print("i=",i) print("Method 2",myS

仍处于学习Python的早期阶段。我使用range()函数编写了一小段代码:

str = "horizon"
# method 2
def printStrInt():
    #print("length of str ",len(str))
    for i in range(0,len(str)-1,2):
        #print("i=",i)
        print("Method 2",myStr[i])

# Calling method
print ("Calling Method")
printStrInt()
在此之后,我了解到有一个新概念叫做“枚举器”,因此我尝试将上述内容改写为:

#method 3
str = "horizon"
def printStrIntervals():
    for count,stringy in enumerate(str):
        print("External to if call count= ",count)
        if (count %2 == 0):
            print("inside if, count= ",count)
            count += 2
            print("inside if + increment, count= ",count)
            print(stringy)

#calling method
print ("Calling Method 3")
printStrIntervals()

问题在于方法3。“count+=2”调用确实将变量“count”增加了2,但是当“for”循环迭代时,count实际上并没有增加2。您能告诉我什么是使enumerate与Range工作相同的正确方法吗?

修改
循环变量的
(此处:
count
stringy
)被认为是不好的做法。考虑使用下面的代码代替:

str = "horizon"
def printStrIntervals_mod():
    for count,stringy in enumerate(str):
        print("External to if call count= ",count)
        if (count %2 == 0):
            print("inside if, count= ",count)
            print(stringy)

#calling function
print("Calling Method 3")
printStrIntervals_mod()

修改
循环变量的
(此处:
count
stringy
)被认为是不好的做法。考虑使用下面的代码代替:

str = "horizon"
def printStrIntervals_mod():
    for count,stringy in enumerate(str):
        print("External to if call count= ",count)
        if (count %2 == 0):
            print("inside if, count= ",count)
            print(stringy)

#calling function
print("Calling Method 3")
printStrIntervals_mod()

您违反了
enumerate
的使用模型:它用于在数据对象上进行平滑迭代,而不是用于跳转项。它是my_str中stringy的
的扩展,而不是count in range(len(my_str))的

此外,任何时候在循环中更改循环索引,都违反了
的假设,并且受语言语义的支配。你试图改变这些语义学,但仅仅用了一句“你不能那样做”,而不是一声崩溃

如果您想进行间歇跳过,只需在
期间构建自己的
。这是正确的用法:
for
适用于在循环输入时知道要执行循环多少次的情况

count=0
当计数
您违反了
枚举的使用模型:它用于在数据对象上进行平滑迭代,而不是跳转项。它是my_str中stringy的
的扩展,而不是count in range(len(my_str))的

此外,任何时候在循环中更改循环索引,都违反了
的假设,并且受语言语义的支配。你试图改变这些语义学,但仅仅用了一句“你不能那样做”,而不是一声崩溃

如果您想进行间歇跳过,只需在
期间构建自己的
。这是正确的用法:
for
适用于在循环输入时知道要执行循环多少次的情况

count=0
当计数
您可能需要注意的是,
str
是内置字符串类型的保留字。我会把它命名为
string
s
。预期的输出是什么?此代码应该做什么?对
for
循环的变量所做的任何操作都不会对当前迭代产生任何影响-它们将始终被循环的迭代器分配新值
enumerate()
range()
的step参数没有等价物-也许您可以使用
enumerate(s[::2])
?它确实会将其递增2,但在下一次迭代中,它会从迭代器中分配值。您可能需要注意的是,
str
是内置字符串类型的保留字。我会把它命名为
string
s
。预期的输出是什么?此代码应该做什么?对
for
循环的变量所做的任何操作都不会对当前迭代产生任何影响-它们将始终被循环的迭代器分配新值
enumerate()
range()
的step参数没有等效项-也许您可以使用
enumerate(s[::2])
?它确实会将其递增2,但在下一次迭代中,它是从迭代中赋值的。你可以随意修改循环变量。你只需了解这意味着什么,以及在每次迭代中如何为循环变量赋值。你可以随意修改循环变量。你只需了解这意味着什么,以及在每次迭代中如何为循环变量赋值