[Tutor] Search function in a list-tuples
Alan Gauld
alan.gauld at btinternet.com
Fri Feb 25 17:15:29 CET 2011
"Christopher Brookes" <chris.klaitos at gmail.com> wrote
> Hi, is there a better way to do this ? (*heros are Character*)
There are several better ways but mainly they involve
techniques that may be too advanced for you at present,
so we'll keep it simple for now :-)
> herosAll = [
> Character(0,"Chris","Soldat fort",type[0],15,5,8,50,1),
> Character(1,"Antaa","Soldat moins fort",type[0],15,5,8,50,1)]
>
> def HeroExist(HerosName):
> herosId = -1
> for heros in herosAll:
> if HerosName in heros.name:
> herosId = heros.id
> if herosId != -1:
> return herosId
> else:
> return -1
replace from the for loop down with:
for heros in herosAll:
if HerosName in heros.name:
herosId = heros.id
return herosId
return None # This allows more convenient testing, see below
Which has the advantage of being slightly faster too.
> HerosName=input("Enter heros name : ")
> if Character.HeroExist(HerosName) != -1:
HeroExist is not a method of Character ( although you could
make it so - one of the better solutions I alluded to above! )
So you don't need to prefix it with Character.
And you can assign the return value to a variable so
you avoid calling it twice:
HerosName=input("Enter heros name : ")
ch = HeroExist(HerosName):
if ch: # because None is treated as False
ch.DisplayCharacterInfos()
else :
print ('This heros does\'nt exist')
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list