Python 属性错误:';非类型';对象没有属性';流行音乐';

Python 属性错误:';非类型';对象没有属性';流行音乐';,python,attributeerror,Python,Attributeerror,我正在用python制作一个简单的21点模拟器,以适应面向对象编程和练习计算卡片。到目前为止,模拟器看起来是这样的 import random cardvalues = {"1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10":10, "J": 10, "Q": 10, "K": 10, "A": 11} class Shoe(object): def __init__(self):

我正在用python制作一个简单的21点模拟器,以适应面向对象编程和练习计算卡片。到目前为止,模拟器看起来是这样的

import random
cardvalues = {"1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, 
"8": 8, "9": 9, "10":10, "J": 10, "Q": 10, "K": 10, "A": 11}
class Shoe(object):
    def __init__(self):
        amount = input("how many decks do you want in the shoe?\n>")    
        self.shoe = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"] * amount * 4
        self.shoe = random.shuffle(self.shoe)
    def deal(self):
        pcard1 = self.shoe.pop()
        pcard2 = self.shoe.pop()
        comcard1 = self.shoe.pop()
        comcard2 = self.shoe.pop()
        handworth = cardvalues[pcard1] + cardvalues[pcard2]
        print "You have been dealt a {} and a {}. The value of your cards is {}".format(pcard1, pcard2, hadworth)
        print "The dealer has a {} and an other card that's faced down.".format(comcard1)
class play(object):
    def __init__(self):
        print "welcome to blackjack simulator!"
        print "You shall be playing at a 100 dollar minimum table, with a wallet of $5000,00"
        my_shoe = Shoe()
        my_shoe.deal()
if __name__ == '__main__':
    play()
错误是

AttributeError: 'NoneType' object has no attribute 'pop'
我很快发现这里的问题是线路

self.shoe = random.shuffle(self.shoe)
把我所有的自我清单变成了无,而不是洗牌。有人能解释一下为什么会发生这种情况以及如何修复它吗


没关系,我自己解决了这个问题。事实证明,我使用的random.shuffle命令是错误的。当我删除“self.shoe=”时,它运行时没有出现错误。

因为uuu init_uuuuu被错误地键入为u init_uuu,所以永远不会调用构造函数,因此永远不会设置self.shoe属性。因此,在执行deal()时,该属性不存在

,因为uuu init_uuuu被错误地键入为u init_uuu,因此永远不会调用构造函数,因此永远不会设置self.shoe属性。因此,在执行deal()时,该属性不存在

import random
cardvalues = {"1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, 
"8": 8, "9": 9, "10":10, "J": 10, "Q": 10, "K": 10, "A": 11}
def deal():
    cards, values = zip(*random.sample(cardvalues.items(), 2)))
    print("You have been dealt a {} and a {}. The value of your cards is {}".format(*cards, sum(values)))
好的,我已经在我的评论中指出了最初的问题,所以我不会重复我自己(除此之外,OP已经解决了这个问题)。 至于为什么我展示了另一个解决方案——因为它更好。如何更好

  • 它不会创建足够的类
  • 它不会创建不必要的中间数据结构(
    self.shoes
  • 总之,为了让你的代码更好地观看链接中的视频,不要在不需要它们的情况下制作类。使用
    random.sample
    而不是创建列表,将其洗牌,然后从中弹出。当然要用蟒蛇3

    好的,我已经在我的评论中指出了最初的问题,所以我不会重复我自己(除此之外,OP已经解决了这个问题)。 至于为什么我展示了另一个解决方案——因为它更好。如何更好

  • 它不会创建足够的类
  • 它不会创建不必要的中间数据结构(
    self.shoes


  • 总之,为了让你的代码更好地观看链接中的视频,不要在不需要它们的情况下制作类。使用
    random.sample
    而不是创建列表,将其洗牌,然后从中弹出。当然要用蟒蛇3

    \u init\u
    应该是
    \u init\u
    。不确定在这种情况下是否有用,但您是否尝试过使用过梁?Pycharm内置了一个命令行,您可以在命令行中使用
    pylint
    。您使用的是print语句,而不是print函数,这意味着您使用的是一些Python 2.x。现在学习python时,没有理由不从3系列(即3.6.1)中最新的python开始。获取一个使用Python3I的最新教程,我还建议将
    amount
    作为参数传递给Shoe
    \uuuu init\uuuu
    方法
    \uu init\uuu
    应该是
    \uu init\uuuu
    。不确定在这种情况下是否有用,但您是否尝试过使用过梁?Pycharm内置了一个命令行,您可以在命令行中使用
    pylint
    。您使用的是print语句,而不是print函数,这意味着您使用的是一些Python 2.x。现在学习python时,没有理由不从3系列(即3.6.1)中最新的python开始。获取使用Python3I的最新教程,我还建议将
    amount
    作为参数传递给ShoeThanks的
    \uuuuu init\uuuu
    方法!真不敢相信我居然没看到!它解决了这个问题,但现在我有另一个问题。在我洗牌后,我的名单变成了无。您知道为什么会发生这种情况,以及我应该如何修复它吗?random.shuffle发生在适当的位置,并且不返回任何结果。这意味着参数的值被更改,而不是返回参数的更改版本。所以你只需要输入random.shuffle(self.shoe)而不是把它分配给self.shoe,但是不要做比你需要的更多的工作。使用
    random.sample
    谢谢!真不敢相信我居然没看到!它解决了这个问题,但现在我有另一个问题。在我洗牌后,我的名单变成了无。您知道为什么会发生这种情况,以及我应该如何修复它吗?random.shuffle发生在适当的位置,并且不返回任何结果。这意味着参数的值被更改,而不是返回参数的更改版本。所以你只需要输入random.shuffle(self.shoe)而不是把它分配给self.shoe,但是不要做比你需要的更多的工作。使用
    random.sample
    Care添加一点解释吗?解释什么?
    random.sample
    zip
    的api?最初的问题是什么以及您是如何解决的。或者更确切地说,为什么你没有帮助解决OP的问题,而是选择提供另一种方法。要不要补充一点解释?解释什么?
    random.sample
    zip
    的api?最初的问题是什么以及您是如何解决的。或者更确切地说,为什么您没有帮助解决OP的问题,而是选择提供另一种方法。