Python'for'循环跳过代码

时间:2014-11-18 19:18:23

标签: python python-3.x range

我有一个for循环,当多个项目在范围内时,它会跳过循环中的代码。如果我输入1学生人数,则会将该学生的姓名和分数打印到该文件中。如果我输入的学生人数超过1,则会跳过for循环中的代码。

是什么给出的?这是代码:

def main():
    num_students = int(input("How many students? "))
    students_file = open('students_file.txt', 'w')
    for count in range(1 - num_students + 1):
        print('Enter the data for student ',count, sep='')
        name = input('Name: ')
        score = input('Score: ')
        students_file.write(name + '\n')
        students_file.write(score + '\n')
        print()
    students_file.close()
    print("The student's data is written to students_file.txt")

main()

4 个答案:

答案 0 :(得分:4)

for count in range (1 - num_studnets + 1)

您正在使用破折号,您应该使用逗号。例如,如果您输入num_students = 2,则会获得:

for count in range(0)

不会运行for循环。 (我们得到0因为1 - 2 + 1 = 0)。

正确的例子:for count in range(1, num_students+1)

答案 1 :(得分:1)

您将零或负结束值传递给range(),因此它会立即停止;产生一个空的范围:

>>> list(range(0))
[]
>>> list(range(-1))
[]

那是因为你从1中减去num_students,然后在最后加1。所以1 - 2 + 1是0,1-3 + 1是-1,等等。

如果你想循环num_students次迭代,那么就这样做:

for count in range(num_students):

或者如果您希望生成从1到num_students的数字,则可以包含起始值并循环到num_students + 1

for count in range(1, num_students + 1):

或只在循环中添加1到count

for count in range(num_students):
    print('Enter the data for student', count + 1)
    name = input('Name: ')

答案 2 :(得分:0)

您的索引计算错误:

如果您的num_students等于1,则您的范围会收到1-1+1 = 1.如果您的num_students等于2,则您的范围会收到1-2+1 = 0。高于2的其他num_students会返回一个负数。

您不应该只使用for i in range(num_students)吗?

希望有所帮助。

答案 3 :(得分:0)

问题出在这里

for count in range(1 - num_students + 1):

特别在这里(1 - num_students + 1) 这是一个数学而不是范围循环

如果您输入1名学生,则会像这样(1 - 1 + 1)= 1 然后程序将进入循环

但是如果你输入4就会像这样(1 - 4 + 1)= -2 程序不会进入负数

的循环

修复它只是替换" - "用"," 当你添加" + 1"最后得到正确的范围