所以我正在编写一个 blackJack 游戏,我制作了一个名为 user_score 和 computer_score 的列表。我使用 random 模块从名为 cards 的列表中选择一个随机整数。但是当我使用 .append() 从卡片中添加随机选择时,它似乎并没有将随机卡片添加到 user_card / computer_card?这是我定义它的地方,也是我使用随机模块的地方:
import random
user_score = 0
computer_score = 0
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
user_cards = []
computer_cards = []
def deal_card():
cards_left = 2
while not cards_left == 0:
random_user = random.choice(cards)
random_computer = random.choice(cards)
user_cards.append(random_user)
computer_cards.append(random_computer)
cards_left -= 1
print(user_score, computer_score)
最后,这是我调用函数的地方:
deal_card()
calculate_score(card_list=[user_score, computer_score])
calculate_score 在这里定义:
def calculate_score(card_list):
user_score = sum(user_cards)
computer_score = sum(computer_cards)
if computer_cards.count(11) > 0 and computer_cards.count(10) > 0:
computer_score = 0
elif user_cards.count(11) > 0 and user_cards.count(10) > 0:
user_score = 0
if user_cards.count(11) > 0:
cards.remove(11)
cards.append(1)
elif computer_cards.count(11) > 0:
cards.remove(11)
cards.append(1)
return user_score
PS:我还在学习python,所以请不要进阶
在 Python 中,您在函数中设置的任何变量在该函数中都是一个单独的局部变量。要改为访问全局变量,您必须编写一个
global
语句,如下所示:
def calculate_score(card_list):
global user_score, computer_score
user_score = sum(user_cards)
computer_score = sum(computer_cards)
...
如果你不设置一个变量而只读取它,它使用全局变量,这就是为什么你可以在函数内部访问
user_cards
和computer_cards
的原因。 cards.remove
实际上并没有改变 cards
变量,只是读取它以查看要编辑的列表,然后编辑该列表,这就是它访问全局 cards
. 的原因
您没有更新全局变量
user_score
和computer_score
。要解决此问题,您需要在 global
函数中将这些变量声明为 calculate_score
:
def calculate_score():
global user_score
global computer_score
user_score = sum(user_cards)
computer_score = sum(computer_cards)
if computer_cards.count(11) > 0 and computer_cards.count(10) > 0:
computer_score = 0
elif user_cards.count(11) > 0 and user_cards.count(10) > 0:
user_score = 0
if user_cards.count(11) > 0:
cards.remove(11)
cards.append(1)
elif computer_cards.count(11) > 0:
cards.remove(11)
cards.append(1)
不传递任何参数调用函数:
deal_card()
calculate_score()