如何解决用户输入重新启动程序后,程序会打印两次
当用户输入导致错误排除并重新启动程序时,条件语句之后的打印功能将打印两次。我看不到在哪里两次调用该变量。
# -*- coding: utf-8 -*-
def start():
concept = ("Concept: ")
global grade
while True:
try:
grade = float(input("something: "))
break
except ValueError:
print("please type numbers")
start()
break
finally:
if grade > 100:
print("grade exceeds")
start()
break
elif grade < 0:
print("grade deficit")
start()
break
elif grade >= 90 and grade <= 100:
print(concept + "A")
elif grade >= 80 and grade <= 89:
print(concept + "B")
elif grade >= 70 and grade <= 79:
print(concept + "C")
elif grade >= 60 and grade <= 69:
print(concept + "D")
elif grade >= 0 and grade <= 59:
print(concept + "F")
else:
pass
start()
感谢您提供的任何帮助。
解决方法
不要将用于打印结果的代码放在finally()
块中。这将执行是否存在异常,因此,当递归调用返回时,它将再次执行该代码。它应该在try
块中,以便在出现错误时被跳过。
也不需要while
循环,因为您总是会中断它。您正在使用递归来重复它。
grade
不必是全局变量。
您不应该进行类似and grade <= 89
的测试。先前的elif
已经确保它小于90
。测试会将89.5
之类的情况排除在范围之外(如果您仅输入整数,请使用int()
而不是float()
)。
def start():
concept = ("Concept: ")
try:
grade = float(input("something: "))
if grade > 100:
print("grade exceeds")
start()
break
elif grade < 0:
print("grade deficit")
start()
break
elif grade >= 90:
print(concept + "A")
elif grade >= 80:
print(concept + "B")
elif grade >= 70:
print(concept + "C")
elif grade >= 60:
print(concept + "D")
else:
print(concept + "F")
except ValueError:
print("please type numbers")
start()
start()
但更一般而言,您不应使用这种递归,而应使用循环。
def start():
concept = "Concept: "
while True:
try:
grade = float(input("something: "))
break
except ValueError:
print("Please type numbers")
if grade > 100:
print("grade exceeds")
start()
break
elif grade < 0:
print("grade deficit")
start()
break
elif grade >= 90:
print(concept + "A")
elif grade >= 80:
print(concept + "B")
elif grade >= 70:
print(concept + "C")
elif grade >= 60:
print(concept + "D")
else:
print(concept + "F")
,
每次执行start()
块时,您的Except
函数都是递归的。由于grade
是全局变量,并且finally
块即使在执行异常块时也始终运行,因此您将获得与异常块执行次数相等的重复打印语句。
换句话说,如果引发错误,然后用户输入一些有效输入,那么您的finally
块的其余部分将使用原始输入再次触发。因为finally
块将始终触发,即使引发异常也是如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。