Python 尝试调用函数本身
我是python新手。最近,我跟随在线python课程学习python。以下是课程中的一个简单问题: 编写一个名为item\u-order的函数,该函数接受一个名为order的字符串作为输入。该字符串仅包含客户可以订购的商品的单词,用一个空格分隔。函数返回一个字符串,该字符串统计每个项目的数量,并按以下顺序合并它们: 沙拉:[沙拉]汉堡包:[汉姆布鲁格]水:[水] 结果示例是:如果Python 尝试调用函数本身,python,function,recursion,Python,Function,Recursion,我是python新手。最近,我跟随在线python课程学习python。以下是课程中的一个简单问题: 编写一个名为item\u-order的函数,该函数接受一个名为order的字符串作为输入。该字符串仅包含客户可以订购的商品的单词,用一个空格分隔。函数返回一个字符串,该字符串统计每个项目的数量,并按以下顺序合并它们: 沙拉:[沙拉]汉堡包:[汉姆布鲁格]水:[水] 结果示例是:如果order=“沙拉水汉堡沙拉汉堡”,则函数返回 沙拉:2汉堡:2水:1 我自己毫无问题地完成了这个问题。代码是: d
order=“沙拉水汉堡沙拉汉堡”
,则函数返回
沙拉: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)
但我只是好奇,如果输入的“顺序”有一些错误,那么我该如何为这种情况更改代码。因此,我修改代码如下:
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)
但是我发现有一个问题,我不能告诉代码哪里有bug
例如:如果我将“沙拉水汉堡沙拉汉堡”作为输入“订单”,它将允许我再次输入,因为“汉堡”是错误的
因此,在我重新输入正确的订单“沙拉水汉堡沙拉汉堡”
后,它将给出以下结果:
“沙拉:2汉堡:1水:1”
但是汉堡包的数量应该是2个。我想当我试图调用函数本身中的函数item\u order()
时会出现问题
有人能帮我找到窃听器吗
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)
这些仍然是原始无效顺序中的变量
修复此代码的最简单方法是更改
item_order(fix_order)
到
这样,您就忽略了中断的输入和迄今为止累积的num.*
计数;相反,您正在将固定订单的结果转发给您自己的呼叫方
此项目订单
调用无效。您没有使用返回值
请记住,调用函数不仅仅是跳转到函数的开头-函数返回后,执行将在调用发生的地方继续
在您的情况下,这是哪一行:
group = 'salad:'+str(num_sa)+' '+'hamburger:'+str(num_ha)+' '+'water:'+str(num_wa)
这些仍然是原始无效顺序中的变量
修复此代码的最简单方法是更改
item_order(fix_order)
到
这样,您就忽略了中断的输入和迄今为止累积的num.*
计数;相反,您正在将固定顺序的结果转发给您自己的调用方。错误在于您的函数item\u 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函数的输出来解决您的问题。错误在于您的函数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\u order输入上返回item\u order函数的输出来解决您的问题。Wow。我现在明白我的问题了。非常感谢你。同时感谢@mrwyatt的评论。哇。我现在明白我的问题了。非常感谢你。同时感谢@mrwyatt的评论。