所以我几乎完成了一个计算器,但是在给出结果之后,我要它询问我是否仍会使用它。 在代码的开头,我有一个循环让它再次开始,除非我键入'n'。
# LOOP TO MAKE IT STAY ON
import sys
from colorama import init
from colorama import Fore, Back, Style
init()
while True:
然后其余的代码继续进行。
然后,最后,我已经尝试过了:
answer = input()
def badanswer():
if answer != "y" or "n":
return True
else:
return False
while badanswer is True:
print ("Wrong answer")
answer = input(("Wanna keep using the calculator? y/n "))
if badanswer is False:
if answer == "y":
continue
else:
break
sys.exit()
以某种方式测试时,我输入一个随机字母(不是y或n),然后程序继续...我在这里缺少什么?我是python的新手,所以请原谅我的错误!谢谢。
答案 0 :(得分:0)
一个问题是
if answer != "y" or "n":
“或”是逻辑运算符,不允许像您尝试的那样“加倍”!=比较。该语句的实际含义是if answer is not "y", or if "n"
,而"n"
与任何非空字符串一样,在布尔上下文中始终为True。
你想要
if answer not in ("y", "n"):
您还需要通过添加括号来实际调用badanswer()。
也没有理由将if True
添加到循环条件中-while badanswer()
做同样的事情。
答案 1 :(得分:0)
badanswer
是一个函数,而不是布尔值。您需要调用该函数并获取其返回值,如下所示:if badanswer() is True
但是,退出程序的逻辑是不必要的。您根本不需要badanswer
函数。只需从用户那里获取输入,然后检查它是“ y”还是“ n”即可。
while True: # loop for exit prompt
answer = input("Wanna keep using the calculator? y/n ").lower()
# using .lower() to permit 'Y' and 'N' as well
if answer == "n":
sys.exit()
elif answer == "y":
break
# exits from the 'exit prompt' loop,
# returns to the outside calculator loop
else:
print("Bad answer!")
注意:如评论中所述,sys.exit()
是退出程序的一种非常刻板的方法。您可以通过修改外部计算器循环检查的变量来更优雅地完成此操作。例如,初始化变量keep_running = True
,用while keep_running: (...)
运行主循环,如果用户请求退出计算器,请设置keep_running = False
以便退出主循环。