len(n)命令无法正常工作(Python)

时间:2018-03-13 18:10:22

标签: python list function append

我正在制定一项计划,在满足条件之前提供折扣:

If number of purchases > 4 give a 20% discount where the type of purchase is not a pet.

我的列表从用户输入附加,我创建了一个单独的整数来跟踪列表中的元素数量,但是,当我打印该整数时,该值始终为0.为了进一步进入此程序,我需要整数来正确保持正确的值。到目前为止,这是我的代码。我是初学者,所以有点乱。

prices=[]
isPet=[]
nItems = len(prices)

def discount(prices, isPet, nItems):
    while True: 
        price=input("Enter the price, (-1 to quit): ") 
        prices.append(price)
        pet=input("Is it a pet? (Y/N, or -1 to quit) ")
        isPet.append(pet)
        if prices[-1] == "-1" and isPet[-1] == "-1":
            prices = prices[:-1]
            isPet = isPet[:-1]
            break
    print(nItems)
    if nItems > 4 and isPet == "N":
        discount = sum(prices)*0.8
        print("The discount is: ", discount)

discount(prices, isPet, nItems)

我在第16行打印了nItems以查看它是否正确存储len(价格),而且我发现它是在打印0

1 个答案:

答案 0 :(得分:1)

那是因为当列表仍为空时,你在顶部执行了len()函数:

prices=[]
# ...
nItems = len(prices)

调用len()会生成一个结果,此处为整数0,然后将名称nItems设置为引用该结果。

Python不存储有关名称引用的值如何生成的任何内容,nItems仅引用整数,而不是通过调用应用于列表的函数len()生成整数{ {1}}。在您为prices分配不同的内容之前,它会一直指向nItems

然后调用0,并在函数print discount()中调用。它仍引用nItems,因此会打印0

如果您要打印0的长度,则需要再次致电prices。打印len()电话的结果:

len()

或将结果分配给变量,然后打印该变量:

print(len(prices))