类型错误:'str'对象不支持项目删除


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_pping[0]类型错误:"str"对象不支持项删除

我做错了什么?

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

这里有几件事:

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

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

    pizza_topping =  pizza_topping[1:]
    

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

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

  • 删除x = True,只检查在while条件下pizza_topping是否等于'quit'

  • 最好给变量取有意义的名称(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))

您可能已经将pizza_topping实例化为list,但您立即开始将其用作str。你似乎试图把太多的想法拼凑在一起,却没有考虑它们。你不需要浇头和披萨。你只需要一个披萨,然后把浇头放进去。

你想做的大部分事情都可以在一条线上完成。您不需要删除任何内容,只需不断覆盖变量即可。此外,您的循环应该绑定到"退出"条件。我改变了这个条件,因为键入"退出"退出很麻烦。只需不键入任何内容,然后按enter键退出即可。

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)))

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

正如@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)

最新更新