Python I';m将另一个变量的值与键中的当前值don'相加后,得到一个键错误;我不知道我在做什么;我失踪了

Python I';m将另一个变量的值与键中的当前值don'相加后,得到一个键错误;我不知道我在做什么;我失踪了,python,dictionary,keyerror,Python,Dictionary,Keyerror,我对类做了一些更改,使self.score=self.setScore()与以前一样,当我将其设置为一个数值时,该值根本没有被更新 from random import shuffle def makeDeck(): Deck = [] for i in range(4): valueCards = ["A", "K", "J", "Q"] Deck.append(va

我对类做了一些更改,使self.score=self.setScore()与以前一样,当我将其设置为一个数值时,该值根本没有被更新

from random import shuffle
def makeDeck():
    Deck = []
    for i in range(4):
        valueCards = ["A", "K", "J", "Q"]
        Deck.append(valueCards)
        for cards in range(2,11):
            Deck.append(cards)
    shuffle(Deck)
    print(Deck)
    return Deck
我测试了通过打印出一些值来更新我,这些值可以很好地打印控制台

class Player:
    def __init__(self, drawn = []):
        self.drawn = drawn
        
        self.score = self.setScore()
    def __str__(self):
        currentDraw = ""
        for cards in self.drawn:
            currentDraw += str(cards) + " "
        finalDraw = currentDraw + "score: " + str(self.score)
        return finalDraw


    def setScore(self):
        self.score = 0

        cardValues = {"A":11, "K":10, "J":10, "Q":10,
                      "2":2, "3":3, "4":4, "5":5, "6":6,
                      "7":7, "8":8, "9":9, "10":10}
        for cards in self.drawn:
            self.score += cardValues[cards]
        return self.score
当我添加下一位时,我收到了错误,但不确定原因

Player1 = Player(["4", "9"])
print(Player1)
cardDeck=makeDeck()
firstDraw=[cardDeck.pop()]
DrawOne=“”.加入(str(e)代表firstDraw中的e)
secondDraw=[cardDeck.pop()]
DrawTwo=“”.连接(第二个Draw中的str(j)表示j)
thirdDraw=[cardDeck.pop()]
第一名=球员(第一次抽签)
player1=玩家(第二次抽签)
player2=玩家(第三个)
失败=错误
while(失败!=正确):
选择=输入(“较高或较低:”)
如果选项==“更高”或“更高”:
如果DrawOneDrawTwo:
计数器+=1
打印(播放者1.分数)
玩家1
其他:
失败=正确
打印(播放者1.分数)
打印(“失败”)

在Makedeck中,您有以下行:

cardDeck = makeDeck()
firstDraw = [cardDeck.pop()]
DrawOne = " ".join(str(e) for e in firstDraw)
secondDraw = [cardDeck.pop()]
DrawTwo = " ".join(str(j) for j in secondDraw)
thirdDraw = [cardDeck.pop()]
First = Player(firstDraw)
player1 = Player(secondDraw)
player2 = Player(thirdDraw)
defeat = False

while(defeat != True):
    choice = input("Higher or lower?: ")
    if choice == "Higher" or "higher":
        if DrawOne < DrawTwo:
            counter  += 1
            print(player1.score)
    if choice == "Lower" or "lower":
        if DrawOne > DrawTwo:
            counter += 1
            print(player1.score)
            player1
    else:
        defeat = True
        print(player1.score)
        print("Defeat")

这导致Deck是一个包含一个元素的列表,该元素是一个包含4个字符串的列表

您可以检查makedeck()的结果是否为[“A”、“K”、“J”、“Q”]、2、3、4、5、6、7、8,…],从而检查deck.pop()的结果是否为[“A”、“K”、“J”、“Q”]。 你真正想要的是:

valueCards = ["A", "K", "J", "Q"]
Deck.append(valueCards)
这将产生一个包含4个字符串的列表,并在函数末尾返回[“a”、“K”、“J”、“Q”、2、3、…],这是您想要的


在第一种情况下,检查元素[“A”、“K”、“J”、“Q”]是否作为dict的键存在,但事实并非如此。

在Makedeck中,您有以下行:

cardDeck = makeDeck()
firstDraw = [cardDeck.pop()]
DrawOne = " ".join(str(e) for e in firstDraw)
secondDraw = [cardDeck.pop()]
DrawTwo = " ".join(str(j) for j in secondDraw)
thirdDraw = [cardDeck.pop()]
First = Player(firstDraw)
player1 = Player(secondDraw)
player2 = Player(thirdDraw)
defeat = False

while(defeat != True):
    choice = input("Higher or lower?: ")
    if choice == "Higher" or "higher":
        if DrawOne < DrawTwo:
            counter  += 1
            print(player1.score)
    if choice == "Lower" or "lower":
        if DrawOne > DrawTwo:
            counter += 1
            print(player1.score)
            player1
    else:
        defeat = True
        print(player1.score)
        print("Defeat")

这导致Deck是一个包含一个元素的列表,该元素是一个包含4个字符串的列表

您可以检查makedeck()的结果是否为[“A”、“K”、“J”、“Q”]、2、3、4、5、6、7、8,…],从而检查deck.pop()的结果是否为[“A”、“K”、“J”、“Q”]。 你真正想要的是:

valueCards = ["A", "K", "J", "Q"]
Deck.append(valueCards)
这将产生一个包含4个字符串的列表,并在函数末尾返回[“a”、“K”、“J”、“Q”、2、3、…],这是您想要的


在第一种情况下,检查元素[“A”、“K”、“J”、“Q”]是否作为dict的键存在,但事实并非如此。

我修复了KeyError和一些其他错误,包括:

  • KeyError问题,您的卡类型是Integer,而dict cardValues键是字符串
  • 由DriesDS回答的makeDeck错误
  • 变量
    计数器
    未定义且从未真正使用过
  • if-else
    语法错误和逻辑错误
代码:


我修复了KeyError和一些其他错误,包括:

  • KeyError问题,您的卡类型是Integer,而dict cardValues键是字符串
  • 由DriesDS回答的makeDeck错误
  • 变量
    计数器
    未定义且从未真正使用过
  • if-else
    语法错误和逻辑错误
代码:


我看不出写“如果选择==”更高“、”更高“:“``与写“如果选择==”更高“、”更高“:``之间有什么区别。我不明白它为什么会出现语法或逻辑错误。Python将“if choice==”Higher“或”Higher“:”解释为“if((choice==”Higher“)或(“Higher”):”。因为如果字符串非空,将字符串转换为布尔值总是正确的,这与写入“if(choice==”Higher“)或(true)”是一样的“如果选择==”更高“:”将被解释为“如果(选择==”更高“)或(选择==”更高“:”,这是您想要的。另一个有效的可能性是““”如果选择在[”更高“,”更高“:”或“:”如果选择.lower()=”更高“:”我不明白写``if choice==“Higher”或“Higher”:``与``if choice==“Higher”或choice==“Higher”:``之间有什么区别。我不明白为什么会出现语法或逻辑错误。Python将“if choice==“Higher”或“Higher”:”解释为“if”((choice==“Higher”)或(“Higher”):”。由于如果字符串为非空,则将字符串转换为布尔值始终为true,因此这与写入“”if(choice==“Higher”)或“(true):”,且始终为true,与choice的值无关。“”if choice==“Higher”或“choice==”Higher:“”将被解释为“”if(choice==”Higher“)或“(choice==”Higher”):“”,这就是您想要的。另一个有效的可能性是““”如果选择[“更高”,“更高”]:“”或“:”如果选择。更低()=“更高”:”
4 9 score: 13
['A', 6, 6, 9, 5, 7, 'A', 4, 'Q', 5, 7, 5, 9, 8, 9, 4, 'K', 7, 'J', 3, 8, 'K', 2, 9, 'J', 4, 2, 8, 'K', 10, 7, 'A', 3, 'Q', 6, 2, 5, 6, 'Q', 3, 'J', 10, 2, 10, 4, 10, 'Q', 'A', 3, 8, 'K', 'J']
Higher or lower?: higher
10
Higher or lower?: lower
Higher or lower?: 1
10
Defeat