如何将函数内变量赋值给全局变量?Python代码异常求助
问题分析与解决方案
问题根源
你遇到的问题是整数的不可变特性导致函数内的修改无法同步到全局变量:
- 全局变量
player_score和computer_score是整数类型,属于不可变类型。当你把它们作为参数传递给score()函数时,函数内部的p_score和c_score只是原变量的副本,并非引用。 - 函数里执行
p_score += i时,只是创建了新的整数对象赋值给局部变量p_score,完全不会影响全局的player_score,所以最后打印的还是初始值0。
另外代码里还有个拼写错误:first_gmae应该改为first_game,避免潜在的调用问题。
修复方案
方案1:直接操作全局变量(使用global关键字)
修改score()函数,声明要使用的全局变量,直接更新它们的值:
import random player_cards=[] computer_cards=[] player_score=0 computer_score=0 def deal_cards(): cards=[11,2,3,4,5,6,7,8,9,10,10,10,10] return random.choice(cards) def hand_cards(): player_cards.append(deal_cards()) computer_cards.append(deal_cards()) def first_game(): # 修正拼写错误 for i in range(2): hand_cards() print(f"Player Cards : {player_cards}") print(f"Computer Cards : X ,{computer_cards[random.randint(0,1)]}") def score(): global player_score, computer_score # 声明使用全局变量 player_score = sum(player_cards) # 用sum简化求和逻辑 computer_score = sum(computer_cards) first_game() score() print(player_score)
方案2:让函数返回计算结果,再赋值给全局变量
这种方式更符合函数的单一职责,避免直接操作全局变量:
# 其他函数不变,修改score函数和调用逻辑 def score(): p_score = sum(player_cards) c_score = sum(computer_cards) return p_score, c_score first_game() player_score, computer_score = score() print(player_score)
方案3:使用可变对象存储分数(比如字典)
利用字典的可变特性,函数内的修改会直接反映到全局对象:
import random player_cards=[] computer_cards=[] scores = {"player": 0, "computer": 0} # 用字典存分数 # 其他函数不变,修改score函数和调用逻辑 def score(scores_dict): scores_dict["player"] = sum(player_cards) scores_dict["computer"] = sum(computer_cards) first_game() score(scores) print(scores["player"])
内容的提问来源于stack exchange,提问作者abtg
相关产品推荐
相关产品推荐

