为什么没有添加user_score和computer_score? (我认为)

问题描述 投票:0回答:2

所以我正在编写一个 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 blackjack
2个回答
0
投票

在 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
.

的原因

0
投票

您没有更新全局变量

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()
© www.soinside.com 2019 - 2024. All rights reserved.