当输入无效时,如何停止for循环迭代?(不允许使用while循环)-Python 范围(0,3)内的i的: print()#迭代时从上一节创建一个空格 原始分数=int(输入(“学生是什么:”+str(学生id[i])+“”的原始分数(0-100)?:”) days_late=int(输入(“该学生迟到了多少天(0-5)?:”) 罚款=(逾期天数*5) 最终分数=(原始分数-处罚) #验证选择 如果0

当输入无效时,如何停止for循环迭代?(不允许使用while循环)-Python 范围(0,3)内的i的: print()#迭代时从上一节创建一个空格 原始分数=int(输入(“学生是什么:”+str(学生id[i])+“”的原始分数(0-100)?:”) days_late=int(输入(“该学生迟到了多少天(0-5)?:”) 罚款=(逾期天数*5) 最终分数=(原始分数-处罚) #验证选择 如果0,python,for-loop,iteration,Python,For Loop,Iteration,尝试这样的方法。您可以跟踪有效输入的数量,并且只有在达到目标数量后才停止循环(while) 有效的\u输入=0 当有效的_输入时,您可以将input语句放入包含try块的while循环中 适用于范围(3)内的j:#或任何其他范围 尝试: 原始分数=int(输入(“学生是什么:”+str(学生id[i])+“”的原始分数(0-100)?:”) days_late=int(输入(“该学生迟到了多少天(0-5)?:”) 打破 除: 通过 如果您确实无法使用while循环 def get_valid_i

尝试这样的方法。您可以跟踪有效输入的数量,并且只有在达到目标数量后才停止循环(while)

有效的\u输入=0

当有效的_输入时,您可以将input语句放入包含try块的while循环中

适用于范围(3)内的j:#或任何其他范围
尝试:
原始分数=int(输入(“学生是什么:”+str(学生id[i])+“”的原始分数(0-100)?:”)
days_late=int(输入(“该学生迟到了多少天(0-5)?:”)
打破
除:
通过

如果您确实无法使用while循环

def get_valid_input():
用户输入=输入(…)
有效=真
如果(…):#在此处进行验证
有效=错误
如果有效:
返回用户输入
其他:
返回get_有效_输入()
对于范围(0,3)内的i:
输入=获取有效的输入()
#做你需要做的事情,基本上是从问题开始你的程序
...
...

这里还有一些额外的问题,例如,如果您不断得到错误的输入值,您需要担心达到最大递归限制的可能性,但是,
get\u valid\u input
理想情况下应该只在您确定您拥有有效的内容时返回。

您可以让for循环像while循环一样运行,并让它永远运行,并将i实现为计数器。然后,仅当循环达到3(或2,以便索引不会更改)时,才可以终止循环,否则将其设置回0:

for i in range (0, 3): 
    
    print() # When iterates creates a space from last section
    
    raw_mark = int(input("What was student: " + str(student_id[i]) + "'s raw mark (0 - 100)?: "))
    
    days_late = int(input("How many days late was that student (0 - 5)?: "))
    
    penalty = (days_late * 5)
    
    final_mark = (raw_mark - penalty)

    # Selection for validation 
    
    if 0 <= raw_mark <= 100 and 0 <= days_late <= 5 and final_mark >= 40:
        
        print("Student ID:", str(student_id[i]))
        
        print() # Spacing for user readability
        
        print("Raw mark was:", str(raw_mark),"but due to the assignment being handed in",
              str(days_late),"days late, there is a penalty of:", str(penalty),"marks.")
        
        print()
        
        print("This means that the result is now:", final_mark,"(this was not a capped mark)")

         
        
    elif 0 <= raw_mark <= 100 and 0 <= days_late <= 5 and final_mark < 40: # Final mark was below 40 so mark must be capped
        
        print("Student ID:", str(student_id[i]))
        
        print()
        
        print("Raw mark was:", str(raw_mark),"but due to the assignment being handed in",
              str(days_late),"days late, there is a penalty of:", str(penalty),"marks.")
        
        print()
        
        print("Therefore, as your final mark has dipped below 40, we have capped your grade at 40 marks.")

        
    else:
        print("Error, please try again with applicable values")

但是说真的,不管不使用while循环的原因是什么,你无论如何都应该使用它。

从问题:“不能使用while循环”我的错误,我读到
不能使用while循环
作为
我不知道如何使用while循环对于范围(3)中的i:“inplace of”while True:“我已经删除了while循环,并对答案进行了检查。从问题中也可以看到:”这样它可以是无限的,直到输入所有3个有效输入“Exception部分是否可以指向selection语句的起始位置?拥有无限循环的唯一合理方法是使用
while
循环。一个不好的做法是将代码放在一个递归调用自身直到条目有效的函数中,但这可能会产生很多问题,而且无论如何也不能是无限的,因为递归深度是有限的。所以,如果是家庭作业,对这样的问题来说是一个不好的约束。是的,我同意这是一个不好的约束,我问过程序是否可以结束,用户必须重新启动它,但他说只有当所有3个正确的输入都被输入时,即使有不正确的输入,程序才能结束。我写了出来,它作为一个while循环工作,但讲师说必须是for循环。不幸的是,我不能使用函数,因为我们不应该使用我们拥有的东西在这个问题的课程中,我们已经学习了while循环,但他希望我们使用for循环来解决这个问题,我已经尝试过抗议,谢谢,我必须这样做。我刚刚给我的讲师发了一封关于这个问题的电子邮件,因为我相信你只会使用while循环来解决这个问题,而不会使用for循环,因为如果输入总是错误的话,范围可能是无限的。同样谢谢你,在这种情况下,你在课堂上学到的教训可能是,“这就是为什么有时你应该使用while循环”
cnt_i = -1
for _ in iter(int, 1):
    cnt_i += 1
    if ...

    else:
        cnt_i = 0
    if cnt_i == 2:
        break