亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python中的遞歸,不覆蓋已更改的變量

python中的遞歸,不覆蓋已更改的變量

忽然笑 2022-12-20 09:30:42
我正在嘗試編寫一個執行以下操作的函數:如果player_hand沒有任何小于或等于mana_bank的數字,則該函數不執行任何操作。如果player_hand的數字小于或等于mana_bank,那么函數應該提示用戶選擇哪個數字。如果用戶選擇的數字小于mana_bank,它應該返回一個包含該數字的列表。如果數字大于mana_bank它應該再次調用該函數,直到他提示一個小于或等于mana_bank的數字。每當我運行該函數并且用戶首先提示一個高于mana_bank的數字時,該函數就會從自身內部調用,然后即使用戶提示一個小于或等于mana_bank的數字,該函數也會返回 None 而不是中的數字一個列表。我還嘗試將變量player_choice 設置為全局變量,但它仍然不起作用。將不勝感激任何指導。def pick_card():    player_choice_str = 0    player_choice = []    for i in player_hand:        if i <= mana_bank:            print(player_hand, mana_bank, "Mana available type the name of the card you wish to play ... ")            player_choice_str = input()            break        if not i <= mana_bank:            return "You don't have enough mana to play a card."    if int(player_choice_str) > mana_bank:        print("That card costs " + str(player_choice_str) + " and you only have " + str(mana_bank) + " this round.")        pick_card()    if int(player_choice_str) <= mana_bank:        player_choice.append(player_choice_str)        return player_choiceplayer_hand = [4, 8, 8]mana_bank = 4print(pick_card())
查看完整描述

2 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

您的第一個問題是player_choice在本地定義的。它將在每次函數調用中被覆蓋。此外,在玩家選擇大于 manabank 的情況下,您必須評估/返回 pick_card() 的返回值。否則遞歸的第一個調用函數將None由于缺少返回值而返回。



查看完整回答
反對 回復 2022-12-20
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

在您的 for 循環中,您有兩個條件 -if i <= mana_bank:并且if not i <= mana_bank:對于任何給定的條件i之一都是如此。


因此,您的循環會在遇到大于mana_bank且不會檢查所有卡片的卡片時立即停止。


你想要做的是:


for i in player_hand:

    if i <= mana_bank:

        print(player_hand, mana_bank, "Mana available type the name of the card you wish to play ... ")

        player_choice_str = input()

        break

if player_choice_str is 0:             # no card selected at the end of the loop

    return "You don't have enough mana to play a card."

此外,您可能希望在此行之后驗證用戶輸入,player_choice_str = input()以檢查他們輸入了有效的卡。


查看完整回答
反對 回復 2022-12-20
  • 2 回答
  • 0 關注
  • 305 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號