Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试调用函数本身_Python_Function_Recursion - Fatal编程技术网

Python 尝试调用函数本身

Python 尝试调用函数本身,python,function,recursion,Python,Function,Recursion,我是python新手。最近,我跟随在线python课程学习python。以下是课程中的一个简单问题: 编写一个名为item\u-order的函数,该函数接受一个名为order的字符串作为输入。该字符串仅包含客户可以订购的商品的单词,用一个空格分隔。函数返回一个字符串,该字符串统计每个项目的数量,并按以下顺序合并它们: 沙拉:[沙拉]汉堡包:[汉姆布鲁格]水:[水] 结果示例是:如果order=“沙拉水汉堡沙拉汉堡”,则函数返回 沙拉:2汉堡:2水:1 我自己毫无问题地完成了这个问题。代码是: d

我是python新手。最近,我跟随在线python课程学习python。以下是课程中的一个简单问题:

编写一个名为item\u-order的函数,该函数接受一个名为order的字符串作为输入。该字符串仅包含客户可以订购的商品的单词,用一个空格分隔。函数返回一个字符串,该字符串统计每个项目的数量,并按以下顺序合并它们:

沙拉:[沙拉]汉堡包:[汉姆布鲁格]水:[水]

结果示例是:如果
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的评论。