Small prog question from a newbie: abt variables in a function definition
Gabriel Genellina
gagsl-py at yahoo.com.ar
Wed Nov 29 05:31:38 EST 2006
At Wednesday 29/11/2006 06:48, B Shyam Sundar wrote:
>I am a newbie as far as python is concerned ... I am trying to write
>a code for playing bridge in obj oriented manner ..
>
>Well ... i have this small problem:
>
>class hand:
> def __init__(self,set_of_cards=[]):
> self.set_of_cards=set_of_cards
> card_played_flag =0
> def play(played_card):
> for i in self.set_of_cards:
> if self.set_of_cards[i] == played_card:
> self.set_of_cards.remove (played_card)
> def sort_hand():
> for i in self.set_of_cards:
> for j in self.set_of_cards:
> if self.set_of_cards[j].face<self.set_of_cards[i].face
> self.set_of_cards
> [j],self.set_of_cards[i]=self.set_of_cards[i],self.set_of_cards[j]
> for i in self.set_of_cards:
> for j in self.set_of_cards:
> if self.set_of_cards[j].suit<self.set_of_cards[i].suit
>
>self.set_of_cards[j],self.set_of_cards[i]=self.set_of_cards[i],self.set_of_cards[j]
>
>I have created card as a class with the attributes of suit face so
>.. card(suit,face)
>
>So my question is this ---
>
>The compiler doesnt recognise that there is self.set_of_cards[j] can
>be a card. It gives a syntax error.
>Also I have not created any instance of the class (Can that be a problem)
(The compiler knows very few about your cards... Python is a very
dynamic language, a lot of things happens at runtime)
Without compiling your example, I can see these syntax errors:
1) In Python indentation matters. sort_hand must have the same
indentation as play (and the other methods).
2) Syntax for the if statement - you need a final ":"
if condition: something
if condition:
do something
and do other thing
and do another thing
>So how do i fix this?
>Also can I specify that the list set_of_cards has only card objects?
>IF yes how?
Short answer: don't bother. (Yes, you *could* inherit from list and
restrict the contained items, but it's seldom used).
You don't have to sort manually, this should work:
set_of_cards.sort(key=lambda card: (card.suit,card.face))
And don't use a mutable initializer in __init__: either use an empty
tuple () or use None and check for it in the method body:
def __init__(self, set_of_cards=None):
if set_of_cards is None: set_of_cards=[]
self.set_of_cards = set_of_cards
--
Gabriel Genellina
Softlab SRL
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
More information about the Python-list
mailing list