[英]How can i stop a for-loop iterating when the input is not valid? (not allowed to use a while loop) - Python
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")
在 else 中,我希望循环返回但没有将 i 迭代到下一个值,这样它就可以是无限的,直到输入所有 3 个有效输入......不能使用 while 循环,也不能放置 if - elif- else 在循环之外。 我也不能使用函数:(
尝试这样的事情。 您可以跟踪有效输入的数量,并且只有while
达到目标数量后才停止循环( while
)。
valid_inputs = 0
while valid_inputs <= 3:
...
if ...:
...
elif ...:
...
else:
# Immediately reset to the top of the while loop
# Does not increment valid_inputs
continue
valid_inputs += 1
您可以将输入语句放在包含 try 块的 while 循环中。
for j in range(3): # or any other range
try:
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)?: "))
break
except:
pass
如果你真的不能使用 while 循环......
def get_valid_input():
user_input = input(...)
valid = True
if (...): # Do your validation here
valid = False
if valid:
return user_input
else:
return get_valid_input()
for i in range (0, 3):
input = get_valid_input()
# Do what you need to do, basically your program from the question
...
...
这里还有一些额外的问题,因为如果您不断获得错误的输入值,您需要担心达到最大递归限制的可能性,但理想情况下get_valid_input
应该只在您确定您有一些有效的东西时返回。
你可以让你的 for 循环表现得像一个 while 循环并让它永远运行并将你的 i 实现为一个计数器。 然后循环只有在它达到 3(或 2,以便您的索引不会改变)时才能终止,否则它会被设置回 0:
cnt_i = -1
for _ in iter(int, 1):
cnt_i += 1
if ...
else:
cnt_i = 0
if cnt_i == 2:
break
但说真的,无论什么原因不使用 while 循环,你都应该使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.