TypeError: 'str' object doesn't support item deletion

TypeError: 'str' object doesn't support item deletion

x = True
pizza = []
pizza_topping = []

while x:
    pizza_topping = input("Please enter your pizza toppings(type 'quit' to when you're done): ")
    
    if pizza_topping == 'quit':
        print(f'Thank you for your order. Your pizza toppings are: {pizza}')
        x = False
    else:
        pizza.append(pizza_topping)
        del pizza_topping[0]

亲爱的人们,

我收到这个错误:

del pizza_topping[0] TypeError: 'str' object doesn't support item deletion

我做错了什么?

编辑:我将 'break' 更改为 x = False(这是我的原始代码)。搞混了。

这里发生了几件事:

  • 在 Python 中,字符串是不可变的,因此您不能就地更改它们的字符。

    要删除字符串的第一个字符,您可以执行以下操作:

     pizza_topping =  pizza_topping[1:]
    

    话虽如此,为什么要删除此处的第一个字符?

  • pizza_topping = [] 更改为 pizza_topping = ""。此更改不会影响程序的 运行,但由于它将保存字符串,因此首先将其设置为列表是没有意义的。

  • 删除 x = True 并检查 pizza_topping 是否等于 'quit' while 的条件。

  • 最好给变量起有意义的名字(x没有意义)

  • 使用','.join打印pizza的内容。

综合起来:

pizza = []

pizza_topping = ""
while pizza_topping != "quit":
    pizza_topping = input("Please enter your pizza toppings(type 'quit' to when you're done): ")
    pizza.append(pizza_topping)
print("Thank you for your order. Your pizza toppings are: " + ','.join(pizza))
    

正如@Samwise 已经说过的(并且变量 x 也不是必需的)也许尝试类似的东西(这意味着您的代码几乎是正确的):

pizza = []
while True:
    pizza_topping = input("Please enter your pizza toppings(type 'quit' to when you're done): ")
    if pizza_topping == 'quit':
        print(f'Thank you for your order. Your pizza toppings are: {pizza}')
        break
    else:
        pizza.append(pizza_topping)

您可能已将 pizza_topping 实例化为 list,但您立即开始将其用作 str。看起来你正试图将太多的想法放在一起,而不是考虑它们。你不需要配料和披萨。你只需要一个披萨,然后把配料放在里面。

您尝试做的大部分事情都可以在一行中完成。您不需要删除任何内容,只需继续覆盖变量即可。此外,您的循环应该绑定到 'quit' 条件。我改变了那个条件,因为输入 'quit' 退出很麻烦。什么都不输入,然后按回车键退出。

s_msg = 'Enter your pizza topping or press return to quit: '
e_msg = 'Thank you for your order!\nYour toppings are:\t{}' 

pizza = []

while (topping := input(s_msg)) != '':
    pizza.append(topping)
    
print(e_msg.format(', '.join(pizza)))

不过,还有更多事情需要考虑。如果用户退出但想重新开始怎么办?如果浇头不是有效浇头怎么办?如果您的用户不会拼写怎么办?您的系统如何知道意大利辣香肠和胡椒粉是一回事?这些才是你真正的挑战。