PDA

View Full Version : [Python] Strano comportamento funzione


grigor91
29-08-2008, 14:15
provando una funzione mi capita una cosa strana:
def Trova(Stringa, Carattere, Inizio=0):
Indice = Inizio
while Inizio < len(Stringa):
if Stringa[Indice] == Carattere:
return Indice
Indice = Indice + 1
return -1

Stringa = "coccodrillo"
Carattere = 'c'
Trova(Stringa, Carattere)

Se inserisco 4 come terzo parametro, invece di stampare -1 stampa:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 4, in Trova
IndexError: string index out of range

Non ho capito come mai mi dà questo errore visto che la stringa è evidentemente più lunga di 4, qualcuno lo sa?

cdimauro
29-08-2008, 14:26
Il problema è che nel while referenzi Inizio anziché Indice. ;)

grigor91
29-08-2008, 14:32
:muro:

mi sa che dovremo dirlo anche a quelli dell Howtothink visto che ho fatto copia-incolla del loro esempio :O

cdimauro
29-08-2008, 14:48
:stordita: La colpa è sicuramente di quelli che hanno effettuato la traduzione dall'inglese all'italiano. :fagiano:

Segnalalo, se ti va. :)

grigor91
01-09-2008, 13:49
ho un'altro problema:
class Mazzo:
def __init__(self):
self.Carte = []
for Seme in range(4):
for Rango in range(1, 14):
self.Carte.append(Carta(Seme, Rango))

def __str__(self):
s = ""
for i in range(len(self.Carte)):
s = s + " "*i + str(self.Carte[i]) + "\n"
return s

def Mescola(self):
import random
NumCarte = len(self.Carte)
for i in range(NumCarte):
j = random.randrange(i, NumCarte)
self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]

def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0

def PrimaCarta(self):
return self.Carte.pop()

def EVuoto(self):
return (len(self.Carte) == 0)
def Distribuisci(self, ListaMani, NumCarte=999):

Mazzo1 = Mazzo()
Mazzo1.Mescola()

ma mi dà questo errore:
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: Mazzo instance has no attribute 'Mescola'

E' strano visto che il metodo Mescola c'è :(

cdimauro
01-09-2008, 13:55
A me funziona (non trovava soltanto "Carta"):
class Mazzo:
def __init__(self):
self.Carte = []
for Seme in range(4):
for Rango in range(1, 14):
self.Carte.append(Carta(Seme, Rango))
def __str__(self):
s = ""
for i in range(len(self.Carte)):
s = s + " "*i + str(self.Carte[i]) + "\n"
return s
def Mescola(self):
import random
NumCarte = len(self.Carte)
for i in range(NumCarte):
j = random.randrange(i, NumCarte)
self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]
def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0
def PrimaCarta(self):
return self.Carte.pop()
def EVuoto(self):
return (len(self.Carte) == 0)
def Distribuisci(self, ListaMani, NumCarte=999):
pass

def Carta(Seme, Rango):
return Seme, Rango

Mazzo1 = Mazzo()
Mazzo1.Mescola()

grigor91
01-09-2008, 14:09
adesso va anche a me. Probabilmente era un errore di indentazione che sballava un po' tutto.