在循环和语句中挣扎

时间:2019-11-14 19:57:32

标签: python python-3.x loops

所以我几乎完成了一个计算器,但是在给出结果之后,我要它询问我是否仍会使用它。 在代码的开头,我有一个循环让它再次开始,除非我键入'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的新手,所以请原谅我的错误!谢谢。

2 个答案:

答案 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以便退出主循环。