首页 > 解决方案 > Python 3 TypeError:'int' object is not callable,但这里有什么问题?

问题描述

目前我正在学习 Python 3,我在二十一点纸牌游戏代码中面临以下问题。

输出是 player.points() 函数的结果,我在编写代码之外对其进行了测试,并且它运行良好,所以我不知道错误消息的来源,有什么提示或想法吗?

```
from IPython.display import clear_output
import time
import random
import emoji

class Player():
    
    def __init__(self, account,name):
        self.name = name
        self.account = account
        self.betbox = 0
        self.cards = [[]]
        self.points = 0
        self.status = True # True -> Player, False -> Spectator
        
    def bet(self,bet):
        self.betbox = int(bet)
        self.account -= int(bet)
    
    def get_card(self, card, deck_of_cards=0):
        self.cards[deck_of_cards].append(card)
    
    def points(self):
        for i,cards in enumerate(self.cards):
            for card in self.cards[i]:
                print(card)
    

    def __str__(self):
        player_string = ""
        name_string = "Player: "+ str(self.name)
        cards_string = ""
        account_string = "Account: "+ str(self.account)
        betbox_string = "Betbox: "+ str(self.betbox)
        points_string = "points to be calculated"
        for i,deck_of_cards in enumerate(self.cards):
            for j,card in enumerate(deck_of_cards):
                cards_string += str(self.cards[i][j]) +" "
        return "\n\n"+ name_string +"\n"+ cards_string +"\n"+ account_string +"\n"+ betbox_string +"\n"+ points_string
    

class Dealer(Player):
    
    def __init__(self,account,name):
        Player.__init__(self, account,name)
        self.stack = []

    def __str__(self):
            player_string = ""
            name_string = "Dealer: "+ str(self.name)
            cards_string = ""
            account_string = "Account: "+ str(self.account)
            betbox_string = "Betbox: "+ str(self.betbox)
            points_string = "points to be calculated"
            for i,deck_of_cards in enumerate(self.cards):
                for j,card in enumerate(deck_of_cards):
                    cards_string += str(self.cards[i][j]) +" "
            return "\n\n"+ name_string +"\n"+ cards_string +"\n"+ account_string +"\n"+ betbox_string +"\n"+ points_string
                 
    def new_stack_of_cards(self):
        value=["2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"]
        color=[emoji.emojize(':heart_suit:'), emoji.emojize(':spade_suit:'), emoji.emojize(':club_suit:'), emoji.emojize(':diamond_suit:')]
        i = 0
        while i < 4:
            for v in value:
                for c in color:
                    self.stack.append(Card())
                    self.stack[-1].new(v,c)
            i += 1
            random.shuffle(self.stack)

    def card(self):
        return self.stack.pop()

class Table():
    
    def __init__(self):
        self.table = []
    
    def initialize(self):
        input_string = ""
        name_strings = []
        while True:
            input_string = input()
            if input_string == "q":
                break
            name_strings.append(input_string)
        return name_strings
    
    def view(self):
        table = ""
        for player in self.table:
            table += str(player) 
        time.sleep(5)
        clear_output()
        print(table)

class Card():
    
    def __init__(self):
        self.value = "2"
        self.color = emoji.emojize(':heart_suit:')

    
    def new(self, value, color):
        self.value = value
        self.color = color
        
    def __str__(self):
        return str(self.color) + str(self.value)
blackjack = Table()

dealer = Dealer(1000000,"d")
dealer.new_stack_of_cards()

name_strings = blackjack.initialize()

for i,player in enumerate(name_strings):
    blackjack.table.append(Player(10000,name_strings[i]))
blackjack.table.append(dealer)

for player in blackjack.table[:-1]:
    player.bet(input())
    
for player in blackjack.table:
    player.get_card(dealer.card())    
blackjack.view()

for player in blackjack.table[:-1]:
    player.get_card(dealer.card())
blackjack.view()


for player in blackjack.table:
    player.points()
    output:
Player: 1
♥10 ♥2 
Account: 9999
Betbox: 1
points to be calculated

Player: 2
♣10 ♣Jack 
Account: 9998
Betbox: 2
points to be calculated

Dealer: d
♥Ace 
Account: 1000000
Betbox: 0
points to be calculated

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-1a19c3780b6f> in <module>
     25 
     26 for player in blackjack.table:
---> 27     player.points()
     28 
     29 

TypeError: 'int' object is not callable

标签: python-3.x

解决方案


在你的Player类中,points是一个整数,不能被调用。我看到该方法points已被注释掉。

    for player in blackjack.table:
        player.points()

从这段代码中,您似乎想要调用 method points,但您却试图调用存储在points属性中的整数。

取消注释该方法,并更改方法或属性的名称。


推荐阅读