与循环和语句斗争

2024-09-28 21:54:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我几乎完成了一个计算器,但在给出结果后,我想让它问我是否还将使用它。 在代码的开头,我有一个循环来让它重新开始,除非我键入“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还很陌生,所以请原谅我的错误!谢谢。你知道吗


Tags: 代码answerfromimporttrueinput键入return
2条回答

一个问题是

if answer != "y" or "n":

“or”是逻辑运算符,不允许“double”a!=你想做的比较。这个语句的实际含义是if answer is not "y", or if "n""n",就像任何非空字符串一样,在布尔上下文中总是真的。你知道吗

你想要什么

if answer not in ("y", "n"):

您还需要通过添加括号来实际调用badanswer()。你知道吗

也没有理由将if True添加到循环条件-while badanswer()做同样的事情。你知道吗

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,以便主循环退出。你知道吗

相关问题 更多 >