Python Can';循环时不能逃逸

Python Can';循环时不能逃逸,python,python-3.x,Python,Python 3.x,我是一名初级程序员,为我的计算机概念III课程编写Python 3.5。本周,我们正在使用try/except块和布尔标志进行数据验证,修改我们上周制作的一个程序。除了一件事,我几乎完成了每周的作业。我不明白为什么我会陷入一个循环。这就是所讨论的循环: while not valid_data: cont = input("Would you like to order another? (y/n) ") if cont.lower not in yorn: va

我是一名初级程序员,为我的计算机概念III课程编写Python 3.5。本周,我们正在使用try/except块和布尔标志进行数据验证,修改我们上周制作的一个程序。除了一件事,我几乎完成了每周的作业。我不明白为什么我会陷入一个循环。这就是所讨论的循环:

while not valid_data:
    cont = input("Would you like to order another? (y/n) ")
    if cont.lower not in yorn:
        valid_data = False
    else:
        valid_data = True
yorn
[“y”,“n”]

以下是上下文的整个程序:

# Program       Lesson 6 Order
# Programmer    Wiley J
# Date          2016.02.13
# Purpose       The purpose of this program is to take an order for cookies.


# Import Class/Format Currency
import locale
locale.setlocale(locale.LC_ALL, '')

# Define Variables
boxes = 0
cost = 3.50
qty = 0
items = 0
yorn = ["y", "n"]

# Banner
print("Welcome to The Cookie Portal")

# Input
valid_data = False

while not valid_data:
    name = input("Please enter your name: ")
    if len(name) > 20:
        print()
        print("Not a valid name")
        valid_data = False
    elif len(name) == 0:
        print("You need to enter a name")
        valid_data = False
    else:
        print("Hello", name)
        valid_data = True

cont = input("Would you like to place an order? (y/n) ")

# Process
while cont.lower() not in yorn:
    cont = input("Would you like to place an order? (y/n) ")

while cont.lower() == "y":

    valid_data = False

    while not valid_data:
        print("Please choose a flavor:")
        print("1. Savannahs")
        print("2. Thin Mints")
        print("3. Tagalongs")
        try:
            flavor = int(input("> "))
            if flavor in range (1, 4):
                items += 1
                valid_data = True
            else:
                valid_data = False
        except Exception as detail:
            print("Error", detail)

    valid_data = False

    while not valid_data:
        try:
            boxes = int(input("How many boxes? (1-10) "))
            if boxes not in range (1, 11):
                print("Please choose a number between 1 and 10")
                valid_data = False
            else:
                qty += boxes
                valid_data = True
        except Exception as detail:
            print("Error", detail)
            print()
            print("Please enter a number")

    valid_data = False

    while not valid_data:
        cont = input("Would you like to order another? (y/n) ")
        if cont.lower not in yorn:
            valid_data = False
        else:
            valid_data = True



# Output
if cont.lower() == "n":
    cost *= qty      
    print()
    print("Order for", name)
    print("-------------------")
    print("Total Items = {}".format(items))
    print("Total Boxes = {}".format(qty))
    print("Total Cost = {}".format(locale.currency(cost)))
    print()
    print("Thank you for your order.")

如果此代码存在其他问题,我不会感到惊讶,但它们很可能是根据任务要求设计的。欢迎任何其他反馈。

似乎您在“lower”的末尾缺少了功能性偏执,如下所示:

if cont.lower() not in yorn:
你的问题是:

if cont.lower not in yorn:
lower是一种方法,它应该是:

if cont.lower() not in yorn:

在您的代码中,您正在执行
cont.lower而不是在您的代码中
<代码>[some string]。lower是一个函数,而不是属性,因此必须在它后面加括号来调用它

cont = input("Would you like to order another? (y/n) ")
if cont.lower() not in yorn:
    valid_data = False
else:
    valid_data = True

后面缺少括号。下:

if cont.lower() not in yorn:

你在写一个全世界的人都能看到的问题。没有必要具体说明这是为了什么班级或学校。我不知道这有什么关系。似乎没有太多的个人认同。不管怎么说,你是对的,这是没有必要的。这不是关于个人识别信息,而是没有人关心。只是噪音并没有给你的问题增加任何信息,我理解。过去我在这里看到过很多对简单问题的严厉回答。我在想,通过解释我是一名学生,也许我可以避免这种情况。说到底,你是对的。啊,是的,我现在明白了。谢谢。@Wiley J如果可以的话,您更喜欢“for”循环而不是“while”循环。在几年前修复了while循环中的一个bug之后,我几乎总是使用for循环。因为如果'cont.lower not in yorn'不会导致程序失败,那么它必须是有效的Python。“它到底在干什么?”迪斯纳米问得好
cont.lower
只返回函数,但不实际调用它;
cont.lower
的类型是
内置函数或方法,而不是
str
。如果您希望通过将函数分配给某个对象多次执行该函数,例如:
cont=“Y”;x=续低;打印(x())#y