“Cast” naar int in Python 3.4

Ik ben een eenvoudig spel aan het schrijven in Python 3.4. Ik ben helemaal nieuw in Python. Code hieronder:

def shapeAt(self, x, y):
    return self.board[(y * Board.BoardWidth) + x]

Geeft een foutmelding:

TypeError: list indices must be integers, not float

Voorlopig heb ik ontdekt dat dit kan gebeuren als Python “denkt” dat het lijstargument geen geheel getal is. Heb je enig idee hoe je dat kunt oplossen?


Antwoord 1, autoriteit 100%

int((y * Board.BoardWidth) + x)gebruik intom het dichtstbijzijnde gehele getal richting nul te krijgen.

def shapeAt(self, x, y):
    return self.board[int((y * Board.BoardWidth) + x)] # will give you floor value.

en gebruik math.floor(met hulp van m.wasowski)

om de minimumwaarde te krijgen

math.floor((y * Board.BoardWidth) + x)

Antwoord 2, autoriteit 33%

Als x, ygetallen of tekenreeksen zijn die letterlijke getallen vertegenwoordigen, kunt u intom naar een geheel getal te casten, terwijl drijvende-kommawaarden een bodem krijgen:

>>> x = 1.5
>>> type(x)
<type 'float'>
>>> int(x)
1
>>> type(int(x))
<type 'int'>

Antwoord 3, autoriteit 11%

Dit is waarschijnlijk omdat uw indices van het type floatwaar deze intsmoeten zijn (omdat u ze gebruikt als array-indices). Ik zou niet gebruiken int(x), ik denk dat u waarschijnlijk van plan bent om een ​​int(zo niet, gebruikt u return self.board[(int(y) * Board.BoardWidth) + int(x)]natuurlijk).

Mogelijk wilt u de vloerwaarde krijgen om uw index te krijgen en hier is hoe u het doet:

import math
def shapeAt(self, x, y):
    return self.board[math.floor((y * Board.BoardWidth) + x)]

U kunt ook Python’s type()Functie om het type van uw variabelen te identificeren.


4, Autoriteit 6%

Wat is het type X en Y, u hoeft dat te controleren, en converteer ze vervolgens naar een geheel getal met int:

def shapeAt(self, x, y):
    return self.board[(int(y) * Board.BoardWidth) + int(x)]

Als u ze eerst wilt opslaan:

def shapeAt(self, x, y):
    x,y = int(x),int(y)
    return self.board[(y * Board.BoardWidth) + x]

Other episodes