Toon posts:

[Python] Tuple object is not callable

Pagina: 1
Acties:
  • 442 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Python:
1
2
3
# Draw map
k = (20/3,0)(0,20/4)(0,20/4*2)(20/3,20/4*3)
pygame.draw.polygon(screen, 000000000, k)
geeft error
Python:
1
2
3
4
Traceback (most recent call last):
  File "C:\Development\Games\HexWar\main.py", line 14, in -toplevel-
    k = (20/3,0)(0,20/4)(0,20/4*2)(20/3,20/4*3)
TypeError: 'tuple' object is not callable


Ik heb al op google gezocht maar ik vind nergens de oplossing :(

[ Voor 4% gewijzigd door Verwijderd op 06-03-2005 17:48 . Reden: effe syntax error er uit gehaald ]


Verwijderd

Die eerste regel geeft bij mij zelfs een SyntaxError :)

Over dat non-callable: een tuple heeft geen __call__ method. Zie het volgende:
Python:
1
2
3
4
5
6
7
>>> k = tuple()
>>> k()

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in -toplevel-
    k()
TypeError: 'tuple' object is not callable

Zoals je waarschijnlijk wel begrijpt kan dit niet, net zoals 1000() ook niet kan. Je probeeert hier namelijk een tuple te gebruiken alsof het een functie is. Als je wilt vermenigvuldigen, moet je er een * tussen zetten.

/edit:
Als ik naar je code kijk denk ik dat je dit wilt:
Python:
1
k = ((20/3, 0), (0, 20/4), (0, 20/4*2), (20/3, 20/4*3))

[ Voor 29% gewijzigd door Verwijderd op 06-03-2005 17:52 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10-05 05:42
Die haakjes zijn dan ook weer optioneel he; dit kan ook:
Python:
1
2
k = (20/3, 0), (0, 20/4), (0, 20/4*2), (20/3, 20/4*3)
# k.__class__ == 'tuple'

En je moet ook bedenken of je een lijst wil (met een variabel aantal waarden) of een tupel (met een vast aantal waarden):
Python:
1
2
k = [ (20/3, 0), (0, 20/4), (0, 20/4*2), (20/3, 20/4*3) ]
# k.__class__ == 'list'


Aangezien een polygoon in principe uit een willekeurig aantal punten bestaat lijkt een lijst me een zinnigere keuze.

[ Voor 27% gewijzigd door Soultaker op 06-03-2005 23:04 . Reden: foutje gefixed, tnx _J_R_R ]


Verwijderd

Soultaker schreef op zondag 06 maart 2005 @ 19:17:
Aangezien een polygoon in principe uit een willekeurig aantal punten bestaat lijkt een lijst me een zinnigere keuze.
Daar ben ik het niet mee eens. De keuze tussen tuple en list moet je puur baseren op de vraag of het object mutable moet zijn.

/mierenneuk, ik denk dat je dit bedoelt:
Python:
1
2
3
4
k = (20/3, 0), (0, 20/4), (0, 20/4*2), (20/3, 20/4*3)
# k.__class__ == tuple
k = [(20/3, 0), (0, 20/4), (0, 20/4*2), (20/3, 20/4*3)]
# k.__class__ == list

>:)

[ Voor 2% gewijzigd door Verwijderd op 06-03-2005 22:51 . Reden: als je dan toch mierenneukt, moet je het wel goed doen ]