Python:为什么我的内部嵌套while循环继续无限期地执行

时间:2016-01-01 22:03:01

标签: python loops while-loop nested

Python 3.4.3

我正在尝试使用Python和turtle创建交互式绘图程序。我的程序首先要求用户指定形状边长。如果长度大于零,程序将开始执行。

我希望程序继续运行并继续向用户询问信息,直到用户输入边长度小于或等于零为止,此时程序将退出。因此,我使用'while-loop'来运行程序并询问用户具体细节。

我希望用户仅限于请求以下三种形状之一;八角形,七边形或六边形。如果用户输入除此之外的任何内容,我希望程序要求用户再次指定他们的形状选择。

因此,我有以下代码:

import turtle
lineLength = float(input("What length line would you like? "))

while lineLength > 0 :
    print("You have choosen to draw a shape, please enter specifics:")
    penColor = input("Please choose a pen color: ")
    shape = input("which shape would you like to draw? ")

    while shape.lower() != "octagon".lower() or shape.lower() !=
    "heptagon".lower() or shape.lower() != "hexagon".lower() :
        print("You have to select a shape from the specified list.")
        shape = input("What shape would you like to draw: ")

输出:  实际的输出是代码将运行“你必须从指定的列表中选择一个形状。你想要绘制什么形状:”无限期地;无论用户输入如何。

预期产出:  我的目标和我期待的是,一旦用户输入八边形,七边形或六边形,内部while循环就会退出。事实上,我不明白为什么如果用户选择这三种形状中的一种形状而内部while循环应该完全运行,因为未满足while循环的条件。

2 个答案:

答案 0 :(得分:2)

您需要使用and,而不是or

如果你考虑一下,你的循环永远不可能结束,因为无论形状如何,它都不会是其他形状名称。即'八角形'不等于'七边形',因此它将保持循环。如果将其更改为and,则只有在形状不等于任何形状时才会循环,这就是您的意图。为了更好地理解这种逻辑,De Morgan's laws是一件好事。

更简洁的方法是使用not in

while shape.lower() not in ["octagon", "heptagon", "hexagon"] :
    print("You have to select a shape from the specified list.")
    shape = input("What shape would you like to draw: ")

答案 1 :(得分:0)

当至少一个参数为TRUE时,OR条件变为TRUE

当所有参数均为TRUE时,AND条件变为TRUE

所以,可能的方法是

  • (形状==八边形)或(形状==七边形)或(形状==六边形)
  • (形状!=八边形)AND(形状!=七边形)AND(形状!=六角形)