Python 中的迭代器(循环变量)
Iterator (loop variable) in Python
为了练习和更好地理解 for
循环,我设计了一个函数来计算给定数字的阶乘。除了迭代器(循环变量)的角色之外,我得到了几乎所有的东西。
下面是我设计的函数:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
当我运行 6的阶乘程序时,函数打印:
The factorial of
6
is 720!
我想了解程序用户给出的输入 n
在迭代器(循环变量)上的作用和关系 factor
?
为了对此进行测试,我删除了迭代器(循环变量)factor
并将其替换为输入变量 n
。
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for n in range(n, 1, -1):
fact = fact * n
print("The factorial of {} is {}!".format(n, fact))
main()
当我 运行 程序使用与前一段代码相同的 6
阶乘时,函数打印:
The factorial of
2
is 720!
当我要求 Python 计算相同的阶乘数时,为什么会得到两个不同的答案。显然,后一段代码有些不对,我认为这与输入变量 n
和迭代器(循环变量)factor
.[=27= 之间的关系有关]
从您的工作代码开始:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
添加打印(提示:这是一个非常有用的调试技巧):
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
print(factor) # Add this line
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
您应该看到这样的输出:
6
5
4
3
2
The factorial of 6 is 720!
如您所见,factor
变量在每次循环中都会发生变化。它采用您指定的 range()
中的每个连续值。
当您将循环变量更改为 n
时,它会被这些值覆盖。
在您的第二个程序中,当函数 运行 到 print 语句时,n 已被 for 循环更改。因此,当 n 在循环中如您预期的那样变化时,当您打印 n 时,它已被循环覆盖。
- 覆盖变量:
作为用户输入的值在 n
变量中定义。在第二个例子中,n 再次在 for 循环中定义。所以变量 n 被覆盖。
检查 n
变量的 is。
例如
>>> n = 6
>>> id(n)
160708724
>>> n = 2
>>> id(n)
160708772
>>>
- 当代码从键盘中排除值时,在类型转换期间使用异常句柄。
例如代码要从键盘编号。
>>> try:
... n = int(raw_input("Enter number:"))
... except ValueError:
... print "Enter only number value."
...
Enter number:99
>>> n
99
>>> type(n)
<type 'int'>
>>> try:
... n = int(raw_input("Enter number:"))
... except ValueError:
... print "Enter only number value."
...
Enter number:test
Enter only number value.
>>>
- 与您的第二个示例相关:我只是打印 n
的值
代码:
def factorialGenerator():
print("This program computes the factorial of a number!")
while True:
try:
n = int(raw_input("Enter a whole number: "))
break
except ValueError:
print "Enter only digit."
print "\nUser enter value %d and its id %s\n"%(n, id(n))
fact = 1
for n in range(n, 1, -1):
print "In for loop value %d and its id %s"%(n, id(n))
fact = fact * n
print("\nThe factorial of {} is {}!".format(n, fact))
if __name__=="__main__":
factorialGenerator()
输出:
This program computes the factorial of a number!
Enter a whole number: r
Enter only digit.
Enter a whole number: 6
User enter value 6 and its id 142415988
In for loop value 6 and its id 142415988
In for loop value 5 and its id 142416000
In for loop value 4 and its id 142416012
In for loop value 3 and its id 142416024
In for loop value 2 and its id 142416036
The factorial of 2 is 720!
尝试:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for n in range(1, n+1, 1):
fact = fact * n
print("The factorial of {} is {}!".format(n, fact))
main()
您的问题是您将 6 处的 n 覆盖为 2,而在新范围内您将覆盖它,直到达到所需的 n 值。
为了练习和更好地理解 for
循环,我设计了一个函数来计算给定数字的阶乘。除了迭代器(循环变量)的角色之外,我得到了几乎所有的东西。
下面是我设计的函数:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
当我运行 6的阶乘程序时,函数打印:
The factorial of
6
is 720!
我想了解程序用户给出的输入 n
在迭代器(循环变量)上的作用和关系 factor
?
为了对此进行测试,我删除了迭代器(循环变量)factor
并将其替换为输入变量 n
。
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for n in range(n, 1, -1):
fact = fact * n
print("The factorial of {} is {}!".format(n, fact))
main()
当我 运行 程序使用与前一段代码相同的 6
阶乘时,函数打印:
The factorial of
2
is 720!
当我要求 Python 计算相同的阶乘数时,为什么会得到两个不同的答案。显然,后一段代码有些不对,我认为这与输入变量 n
和迭代器(循环变量)factor
.[=27= 之间的关系有关]
从您的工作代码开始:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
添加打印(提示:这是一个非常有用的调试技巧):
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for factor in range(n, 1, -1):
print(factor) # Add this line
fact = fact * factor
print("The factorial of {} is {}!".format(n, fact))
main()
您应该看到这样的输出:
6
5
4
3
2
The factorial of 6 is 720!
如您所见,factor
变量在每次循环中都会发生变化。它采用您指定的 range()
中的每个连续值。
当您将循环变量更改为 n
时,它会被这些值覆盖。
在您的第二个程序中,当函数 运行 到 print 语句时,n 已被 for 循环更改。因此,当 n 在循环中如您预期的那样变化时,当您打印 n 时,它已被循环覆盖。
- 覆盖变量:
作为用户输入的值在 n
变量中定义。在第二个例子中,n 再次在 for 循环中定义。所以变量 n 被覆盖。
检查 n
变量的 is。
例如
>>> n = 6
>>> id(n)
160708724
>>> n = 2
>>> id(n)
160708772
>>>
- 当代码从键盘中排除值时,在类型转换期间使用异常句柄。
例如代码要从键盘编号。
>>> try:
... n = int(raw_input("Enter number:"))
... except ValueError:
... print "Enter only number value."
...
Enter number:99
>>> n
99
>>> type(n)
<type 'int'>
>>> try:
... n = int(raw_input("Enter number:"))
... except ValueError:
... print "Enter only number value."
...
Enter number:test
Enter only number value.
>>>
- 与您的第二个示例相关:我只是打印 n 的值
代码:
def factorialGenerator():
print("This program computes the factorial of a number!")
while True:
try:
n = int(raw_input("Enter a whole number: "))
break
except ValueError:
print "Enter only digit."
print "\nUser enter value %d and its id %s\n"%(n, id(n))
fact = 1
for n in range(n, 1, -1):
print "In for loop value %d and its id %s"%(n, id(n))
fact = fact * n
print("\nThe factorial of {} is {}!".format(n, fact))
if __name__=="__main__":
factorialGenerator()
输出:
This program computes the factorial of a number!
Enter a whole number: r
Enter only digit.
Enter a whole number: 6
User enter value 6 and its id 142415988
In for loop value 6 and its id 142415988
In for loop value 5 and its id 142416000
In for loop value 4 and its id 142416012
In for loop value 3 and its id 142416024
In for loop value 2 and its id 142416036
The factorial of 2 is 720!
尝试:
def main():
print("This program computes the factorial of a number!")
n = eval(input("Enter a whole number: "))
fact = 1
for n in range(1, n+1, 1):
fact = fact * n
print("The factorial of {} is {}!".format(n, fact))
main()
您的问题是您将 6 处的 n 覆盖为 2,而在新范围内您将覆盖它,直到达到所需的 n 值。