[Tutor] Search function in a list-tuples
Christopher Brookes
chris.klaitos at gmail.com
Fri Feb 25 19:51:52 CET 2011
Hi,
I found the solution :)
Special thanks to Alan G.
Solution :
def FindByName(HerosName):
for heros in herosAll:
if HerosName == heros.name:
return heros
return None
HerosName = 'notfound'
while FindByName(HerosName) == None:
HerosName=input("Enter heros name (type exit for close): ")
if HerosName.lower() == 'exit':
Display_menu()
else:
ch = FindByName(HerosName)
if ch:
ch.DisplayCharacterInfos()
newSearch=input('New search ? (Y/N)')
else :
print ('This heros does\'nt exist')
2011/2/25 ALAN GAULD <alan.gauld at btinternet.com>
> CCing group. Please use ReplyAll in replies to the list.
>
>
> > Hi, thank your for your answer. i wrote this now :
>
>
> def HeroExist(HerosName):
> for heros in herosAll:
> if HerosName in heros.name:
> herosId = heros.id
> return herosId
> return None
>
> HerosName=input("Enter heros name : ")
> ch = HeroExist(HerosName)
> if ch:
> ch.DisplayCharacterInfos()
> else :
> print ('This heros does\'nt exist')
>
> But whatever i type, he says : heros doesn't exist :/
>
> That suggets a problem with how the name is being stored.
> Can you send the code for the Character class, esp[ecially the init method.
> Plus a cut n paste of the output of a ruin of the programme so that
> we can see exactly what you are inputting and what the
> results are?
>
> BTW you don't need the \ in the last print. You are using double quotes
> around the string so you can just type the single quote directly
>
> print ( "This hero doesn't exist')
>
> Alan G.
>
> 2011/2/25 Alan Gauld <alan.gauld at btinternet.com>
>
>> "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/
>>
>>
>>
>> _______________________________________________
>> Tutor maillist - Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>
>
>
> --
> Brookes Christopher.
>
>
--
Brookes Christopher.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110225/3c12d285/attachment.html>
More information about the Tutor
mailing list