python中的递归,不覆盖已更改的变量

python中的递归,不覆盖已更改的变量,python,recursion,Python,Recursion,我正在尝试编写一个函数,该函数执行以下操作: 如果玩家手牌没有任何小于或等于魔法库的数字,则该函数不应执行任何操作 如果玩家手牌的数字小于或等于魔法银行,则该功能应提示用户选择哪个数字 如果用户选择的数字小于mana_bank,则应返回包含该数字的列表。如果数字大于法力库,则应再次调用该函数,直到他提示一个小于或等于法力库的数字 每当我运行该函数时,用户首先提示一个高于mana_bank的数字,该函数就会从自身内部调用,然后即使用户提示一个低于或等于mana_bank的数字,该函数也会返回Non

我正在尝试编写一个函数,该函数执行以下操作:

如果玩家手牌没有任何小于或等于魔法库的数字,则该函数不应执行任何操作

如果玩家手牌的数字小于或等于魔法银行,则该功能应提示用户选择哪个数字

如果用户选择的数字小于mana_bank,则应返回包含该数字的列表。如果数字大于法力库,则应再次调用该函数,直到他提示一个小于或等于法力库的数字

每当我运行该函数时,用户首先提示一个高于mana_bank的数字,该函数就会从自身内部调用,然后即使用户提示一个低于或等于mana_bank的数字,该函数也会返回None而不是列表中的数字

我还尝试将变量player\u 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_choice



player_hand = [4, 8, 8]
mana_bank = 4

print(pick_card())
def拾取卡():
玩家\u选择\u str=0
玩家选择=[]
对于玩家手中的i:

如果我你的第一个问题是
player\u choice
是本地定义的。它将在每次函数调用中被覆盖。此外,如果玩家的选择大于manabank,则必须计算/返回pick_card()的返回值。否则,由于缺少返回值,递归的第一个调用函数将返回
None

您的第一个问题是
player\u choice
是本地定义的。它将在每次函数调用中被覆盖。此外,如果玩家的选择大于manabank,则必须计算/返回pick_card()的返回值。否则,由于缺少返回值,递归的第一个调用函数将返回
None

在for循环中,您有两个条件-
如果我在for循环中,您有两个条件-
如果我只是为了您的信息,如果给出的数字超过
mana_bank
的次数太多,用户可能会使用
递归错误使程序崩溃。有关正确处理用户输入的信息,请参阅。如果玩家有多张卡仅用于提供您的信息,则如果给出的数字超过
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."