我如何fixTypeError:'str'对象不可调用? [英] How can i fixTypeError: 'str' object is not callable?

查看:94
本文介绍了我如何fixTypeError:'str'对象不可调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我也看到其他人也发生了这个错误,但我不知道是我的错误所在.

Well i've seen this error occur to others aswell but i can't figure out were my mistake is.

我明白了:

Traceback (most recent call last):
File "C:\Users\Bill\Desktop\Finalizing_2.1(DEVELOPING).py", line 100, in <module>
combined = list(zip(symbols,deck))
TypeError: 'str' object is not callable

这是我的代码:(Python 3.x)

Here is my code: (Python 3.x)

import random #shuffle
import os#file deleting

def shuffledDeck(deck):#shuffles ceck
    random.shuffle(deck)

def dealCard(deck,participant):#deal cards , chooses between player and house with string z
    participant.append(deck.pop())
    if z==1:
        print('\nYou got  %s ' %("{} {}".format(player[len(player)-1],symbols.pop()))) 
    else:
        print('\nHouse got %s ' %("{} {}".format(house[len(house)-1],symbols.pop())))

def total(hand):#chooses between player and house with string z and displays total
    y =sum(hand)
    if z==1:
        print('Your total now is :',y)
    else:
        print('House total now is :',y)

def compareHands(house, player):  #compares players and house's hand totals
    global wallet 
    global bet
    global bank
    if sum(house)>sum(player):
        print('You Lose :(')

        wallet += bet
        bank -= bet
        prw = False
    elif sum(house)<sum(player):
        print('You Win!')

        wallet += bet
        bank -= bet
        prw = True
    elif sum(house)==sum(player):
        print('DRAW!')

def printHistory(history):  #  prints history.txt
    if history=='h':
        f = open('history.txt')
        for l in f:
            print(l,end='') 


# r=0           # last game
row = 1         #  times a game was played
bank = 10       # starting value
exit = False    # making sure the game won't exit if the user doesn't want to
newGame = True

#  defy if it is a new game or the previous had been canceled
try:
   f=open('history.txt')
   print('\n________________________ \nHistory File Available')
   newGame=False#it is not a new game
except FileNotFoundError:
    print('Creating History File..')
    f=open('history.txt','w')
    newGame=True#it is a new game
if newGame==False:#if it is not a new game
    answer=input('Start new game (n) or continue previous game (c)?')#ask 
    if answer=='n':
        f.close()
        os.remove('history.txt')
        f=open('history.txt','w')
    elif answer=='c':
        f=open('history.txt')
        l=f.readlines()
        list=l.pop()
        splitlist=list.split()
        row=int(splitlist[0])
        bank=int(splitlist[5])

print('========================')#begining game

Done=iter([True, False])
while bank>0 and exit==False and (bank <30 or next(Done)):#if bank<0 bank looses so the loop brakes


deck=[2,2,2,2,3,3,3,3,4,4,4,4,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11]
symbols=['\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663','\u2660', '\u2661', '\u2662', '\u2663']


wallet = 0 #Money player won
prw = False #Player Won
player = []
house = []
bet = 0
z = 1 #to choose player or house in totalHand()
loop = True #Enter Houses loop
#out2=1#loopbrake2
Round = 2 #Rounds played(used in 5 cards combination)


#  shuffle both deck and symbols the same way
combined = list(zip(symbols,deck))
shuffledDeck(combined)
symbols[:], deck[:] = zip(*combined)

#player
dealCard(deck,player)
bet = int(input('Place your bet: '))
while bet > bank:
    print('Your bet should not be higher than bank\nplease try again >>>')
    bet = int(input('Place your bet: '))
dealCard(deck,player)
total(player)


#checking
if sum(player) == 22: #double ace
    print('You win (Α-Α)!!')

    wallet += bet
    bank -= bet
    loop = False
    prw = True
elif sum(player)==21:
    print('You win!!')

    wallet += bet
    bank -= bet
    loop = False
    prw = True
else:
    action = input('Hit (h) or stand (s)?: ')
    while action == 'h' and sum(player) <= 21 and prw == False:
        dealCard(deck, player)
        total(player)
        Round += 1     # 5 cards combination

        if player[0] == 7 and player[1] == 7 and player[2] == 7:
            print('You win (Σκουπα)!!')

            wallet += bank
            bank -= bank
            loop = False
            prw = True
            exit = True
        elif Round == 5 and sum(player) <= 21:
            print('You win! (Πενταφυλλια)')

            wallet += bet
            bank -= bet
            loop = False
            prw = True
        elif sum(player) == 21:
            print('You win (21)!!')

            wallet += bet
            bank -= bet
            loop = False
            prw = True
        elif sum(player) < 21:
            action = input('Hit (h) or stand (s)?: ')
        elif sum(player) > 21:
            print('You Lose :( ')

            wallet -= bet
            bank += bet
            loop = False
            pwd = False




#houses turn
if loop is True:
    z=0
    dealCard(deck,house)

    total(house)
    while sum(house)<17:
        dealCard(deck,house)
        total(house)


    #comparison
    if sum(house)<=21:
        if house[0] == 7 and house[1] == 7 and house[2] == 7:
            print('You Lose :( (7-7-7)')

            wallet = 0
            bank += bet
            pwd = False
            exit = True         
        elif sum(house) == 21:
            print('You Lose :( ')

            wallet -= bet
            bank += bet
            pwd = False
        else:
            compareHands(house,player)
    elif sum(house)>21:
        print('You Win!')

        wallet += bet
        bank -= bet
        prw = True

print("Bank's balance now is", bank)
if sum(house) == sum(player):
    winner = 'DRAW'
elif prw is False:
    winner = 'House'
elif prw is True:
    winner = 'Player'


#updating history.txt file
if row==1:
    f=open('history.txt','r+')
    f.write('%-*s%-*s%-*s%-*s%-*s %-*s'%  (10,'Round',15,'Bet($)',10,'Player',10,'House',15,'Winner',10,'Bank($)'))
    f.close()
    f=open('history.txt','a')
    f.write('\n%-*s%-*s%-*s%-*s%-*s %-*s'%(10,row,15,bet,10,sum(player),10,sum(house),15,winner,10,bank))
    row+=1
    f.close()
else:
    f=open('history.txt','a')
    f.write('\n%-*s%-*s%-*s%-*s%-*s %-*s'%      (10,row,15,bet,10,sum(player),10,sum(house),15,winner,10,bank))
    row+=1
    f.close()


#display history and other actions
history=input('\nContinue(c), print history (h) or exit game (x)?')
while history=='h':
    printHistory(history)
    history=input('\nContinue(c), print history (h) or exit game (x)?')
if history=='c':
    exit=False
else:
    exit=True


#game overview
print('Game Over')
if bank==0:
    print('Player has won $10')
elif bank>10:
    print('Player has lost %d$'%(bank-10))`

这是大多数初学者使用python制作的简单的二十一点游戏,希望代码中的注释有助于您理解它.

It is a simple blackjack game that most beginners make in python i hope that the comments on the code will help you understand it.

只要我是该语言的新手,我的错误就应该很愚蠢,但我希望您能帮助我. 它应该运行,因为唯一的问题是... 当程序询问时:

My mistake should be something silly as long as i am new to the language but i hope you will help me. It runs as it should the only problem is... When the programm asks :

开始新游戏(n)或继续上一个游戏(c)?

Start new game (n) or continue previous game (c)?

您输入'c'会给出错误.

and you give 'c' as input it gives the error.

我在此网站上找到了此方法,因此我可能无法正确使用它:

I found this method on this site so i may not use it right:

combined = list(zip(symbols,deck))
shuffledDeck(combined)
symbols[:], deck[:] = zip(*combined)

  • 对代码的任何改进都是可以接受的.
  • 预先感谢!

    更新!

    是否可以显示字母"A"(代表ace)而不是11?

    is there any way to display the letter 'A' (stands for ace) instead of 11?

    例如

    你有一个♡ 代替

    You got A ♡ instead of

    您有11个♡

    推荐答案

    您已经用字符串覆盖了内置的list函数:

    You've overwritten the built-in list function with a string:

    list=l.pop()
    

    要解决此问题,请使用不同于list的其他变量名.通常,在命名变量时,您将希望避免隐藏内置函数.也就是说,请勿命名listmapdict等.

    To fix this, use a different variable name, other than list. In general, you'll want to avoid shadowing built-ins when naming your variables. That is, don't name things list, map, dict, etc.

    以变量中的名字命名也是一种好习惯.因此,如果您有list = ["apples", "oranges", "pears"],则可以考虑将其重命名为fruits = ["apples", "oranges", "pears"].它确实有助于提高代码的可读性.

    It's also good practice to name your variables after what's in them. So if you have list = ["apples", "oranges", "pears"], you might consider renaming it fruits = ["apples", "oranges", "pears"]. It really helps with code readability.

    这篇关于我如何fixTypeError:'str'对象不可调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆