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