Python 巨蟒战卡游戏

Python 巨蟒战卡游戏,python,Python,我正在尝试制作一个战争卡游戏,但是我很难让我的代码连接起来。我一直得到一个错误,deck1没有定义。我不明白为什么会这样。我正在尝试将deck1和deck2连接到playerA=deck1.pop等等。谢谢你的帮助 import random total = { 'winA':0, 'winB':0 } def shuffleDeck(): suits = {'\u2660', '\u2661', '\u2662', '\u2663'} ranks = {'2',

我正在尝试制作一个战争卡游戏,但是我很难让我的代码连接起来。我一直得到一个错误,deck1没有定义。我不明白为什么会这样。我正在尝试将deck1和deck2连接到playerA=deck1.pop等等。谢谢你的帮助

import random
total = {
   'winA':0,
   'winB':0
}

def shuffleDeck():
    suits = {'\u2660', '\u2661', '\u2662', '\u2663'}
    ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}
    deck = []

for suit in suits:
    for rank in ranks:
        deck.append(rank+' '+suit)

random.shuffle(deck)
return deck

def dealDecks(deck):
    deck1 = deck[:26]
    deck2= deck[26:]
    hand = []
    return hand

def total(hand):
    values = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '1':10,
          'J':11, 'Q':12, 'K':13,'A':14}

def war(playerA, playerB):
    if playerA==playerB:
        print("Tie")
    elif playerA > playerB:
        print("Winner:Player A")
        return 1
    else:
        print("Winner:player B")
        return -1

def process_game(playerA,playerB):
    result = game(p1c,p2c)
    if result == -1:
        total['winB'] += 1
    else:
        total['winA'] += 1

deck = shuffleDeck()

dealDecks(deck);

gameplay = input("Ready to play a round: ")

while gameplay == 'y':

    playerA = deck1.pop(random.choice(deck1))
    playerB = deck2.pop(random.choice(deck2))
    print("Player A: {}. \nPlayer B: {}. \n".format(playerA,playerB))
    gameplay = input("Ready to play a round: ")

if total['winA'] > total['winB']:
    print("PlayerA won overall with a total of {} wins".format(total['winA']))
else:
    print("PlayerB won overall with a total of {} wins".format(total['winB']))

问题是Python会根据需要创建变量。因此,在
dealDecks
函数中,它不是引用全局变量
deck1
deck2
,而是创建两个同名的局部变量

因此,当您尝试从全局
deck1
弹出
时,它会出错,因为它从未定义过

要解决此问题,您可以使用
dealdeck
中的
global
关键字:

def dealDecks():
    global deck1
    global deck2

然而,这不是一个好的做法。只有在绝对必要的情况下才应使用
global
。通常,良好的类和程序结构消除了对
全局

的需要。目前,
dealdeck
并没有真正做到它所说的。为什么它创建并
返回一个空列表:

def dealDecks(deck):
    deck1 = deck[:26]
    deck2= deck[26:]
    hand = []
    return hand
然后忽略这一点:

dealDecks(deck);
因此,
deck1
dealDecks
之外的任何地方都无法访问。相反,实际返回并分配甲板的两部分:

def split_deck(deck):
    middle = len(deck) // 2
    deck1 = deck[:middle]
    deck2 = deck[middle:]
    return deck1, deck2

deck1, deck2 = split_deck(deck)

请注意,我已经分解了“幻数”,重命名了该函数以描述它的功能,并按照采用了带有下划线的
小写字母。

deck1
仅在
dealDecks()中定义。你不能在函数之外访问它。为什么你建议了一个实现,然后立即指出OP不应该采用它?主要是因为我的实际建议需要对代码进行更大的重构,而不是在此进行适当的重构。所以我为他们的问题提供了一个快速的解决方案,尽管我更喜欢你的重构,谢谢!但是现在我得到了这个错误,我不知道它到底是什么意思…回溯(最近一次调用上次):文件“C:\Users\Morgan\Desktop\homework8.py”,第56行,playerA=deck1.pop(random.choice(deck1))TypeError:“str”对象不能解释为整数>>这个错误告诉你它到底是什么意思。尝试阅读。我现在遇到了这样一个错误…准备进行一轮:n回溯(最近一次调用最后一次):文件“C:\Users\Morgan\Desktop\homework8.py”,第62行,if total['winA']>total['winB']:TypeError:'function'对象不可订阅(我缺少什么吗?)是的,你是;你的大部分代码毫无意义。许多问题与我为您解决的问题类似,因为您没有正确使用函数和变量。我建议你在继续之前通读一遍。