我是python的新手。最近,我按照在线python课程学习python。这是课程中的一个简单问题:
编写一个名为 item_order 的函数,该函数将名为 order 的字符串作为输入。该字符串仅包含客户可以按一个空格分隔的商品的单词。该函数返回一个字符串,该字符串计算每个项目的数量,并按以下顺序合并它们:
<沙拉:[#salad]汉堡包:[#hambruger]水:[#water]。
结果示例是:if order = "salad water hamburger salad hamburger"
然后函数返回
沙拉:2个汉堡包:2个水:1个
我自己完成了这个问题而没有任何问题。代码是:
def item_order (order):
num_sa = 0
num_wa = 0
num_ha = 0
new_order = order.split(' ')
for item in new_order:
if item == 'salad':
num_sa += 1
elif item == 'water':
num_wa += 1
elif item == 'hamburger':
num_ha += 1
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
print('Please enter the order.')
order = raw_input('')
group = item_order(order)
print(group)
但是好奇如果输入'order'有一些错误,那么我怎么能改变我的代码呢?所以我修改了我的代码:
def item_order (order):
num_sa = 0
num_wa = 0
num_ha = 0
flag = 0
new_order = order.split(' ')
for item in new_order:
if item == 'salad':
num_sa += 1
elif item == 'water':
num_wa += 1
elif item == 'hamburger':
num_ha += 1
else:
flag = 1
break
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
item_order(fix_order)
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
print('Please enter the order.')
order = raw_input('')
group = item_order(order)
print(group)
但是我发现有一些问题我无法分辨出代码有哪些错误。
例如:如果我将"salad water hamburger salad hamburge"
作为输入'order',它会让我再次重新输入,因为'hamburge'是错误的。
所以在我重新输入正确的订单"salad water hamburger salad hamburger"
之后,它会给我结果:
“沙拉:2个汉堡包:1个水:1个”
但汉堡包的数量应为2.我认为当我尝试在其自身内调用函数item_order()
时会出现问题。
有人可以帮我找到这个错误吗?
答案 0 :(得分:1)
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
item_order(fix_order)
此item_order
来电无效。您没有使用返回值。
请记住,调用函数不只是跳转到函数的开头 - 在函数返回后,执行会继续执行调用。
在你的情况下,这一行:
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
这些仍然是原始无效order
的变量。
修复此代码的最简单方法是更改
item_order(fix_order)
到
return item_order(fix_order)
这样你就忽略了破碎的输入和迄今累积的num_*
计数;相反,您将固定订单的结果转发给您自己的来电者。
答案 1 :(得分:1)
错误是你的函数item_order正在返回一个字符串,但是你没有在任何地方捕获它。因此,当您在if语句中调用item_order时,您需要有一个变量来捕获它返回的字符串。例如:
if flag == 1:
print('There is something wrong on the order you insert, please re-enter.')
fix_order = raw_input('')
group = item_order(fix_order)
return group
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
return group
这可以通过在fix_order输入上返回item_order函数的输出来解决您的问题。