如何使用 python 3.6 为循环创建决策提示

How ti create a decision prompt for a loop with python 3.6

我正在尝试为 python 3.6 的循环创建决策提示。但是不行

def cycle():
looping = "yes"
while looping == "No" or "no" or "n" or "N":
    looping = input('Do you want to make a new calculation? \n \t (Y/N)')
    if looping == "No" or "no" or "n" or "N":
        looping = "yes"
        break
    elif looping != "No" or "no" or "n" or "N":
        print('This is not the right answer')
        looping="no"

有人可以帮我解决这个问题吗? 谢谢!

你不能像那样比较字符串:

while looping == "No" or "no" or "n" or "N": # wrong

基本上尾随的 or 语句只是检查 "no" 是否不为空,等等。它们没有用。

  • 如果looping=="No",你会得到True:循环继续
  • 如果looping!="No",你会得到下一个"non-False":"no":循环继续

正确方式:转为小写,判断字符串是否属于列表:

while looping.lower() in ["no","n"]:

除了Jean-François Fabre指出的比较错误外,这里还有一个逻辑错误。为了简化一点,这是您示例中的代码:

looping = "yes"
while looping == "no":
    (do stuff which might change looping to something else)

while 循环永远不会开始。你应该写:

looping = "no"
while looping == "no":
    (do stuff)

或者正如 Jean-François 所说,

looping = "no"
while looping.lower() in ["no","n"]:
    (do stuff)

那么你要将某人的 "No" 答案转换成 "yes"...?

除非用户提供有效输入,否则为什么不尝试永远停留在循环中:

def cycle():
    newcalc = "no"
    while True:
        newcalc = input('Do you want to make a new calculation? \n \t (Y/N)')
        if newcalc.lower() in ["no","n"]:
            newcalc = "no"
            break
        if newcalc.lower() in ["yes","y"]:
            newcalc = "yes"
            break
        print('This is not the right answer')