我有一个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()
答案 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"最后得到正确的范围