簡體   English   中英

嘗試在自身內部調用函數

[英]Try to call a function within itself

我是python的新手。 最近,我遵循在線python課程學習python。 這是課程中的一個簡單問題:

寫調用的函數item_order是需要輸入一個名稱的順序串。 該字符串僅包含客戶可以訂購的商品的單詞,中間用一個空格隔開。 該函數返回一個字符串,該字符串對每個項目的數量進行計數,並按以下順序合並它們:

沙拉:[#沙拉]漢堡包:[#hambruger]水:[#水]。

結果示例為:如果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)

但是只是好奇如果輸入的“命令”有一些錯誤,那么我該如何針對這種情況更改代碼。 所以我像這樣修改我的代碼:

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"作為“訂單”輸入,由於“漢堡”是錯誤的,它將讓我再次輸入。

因此,當我重新輸入正確的訂單"salad water hamburger salad hamburger" ,它將得到以下結果:

“沙拉:2漢堡:1水:1”

但是漢堡包的數量應該是2。我認為嘗試在內部調用item_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)

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_*累計的num_*計數; 相反,您會將固定訂單的結果轉發給您自己的呼叫者。

錯誤是您的函數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函數的輸出來解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM