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)