مشکل این برنامه چیه؟ - مهمان - 2007-02-24
سلام
کد : #!/usr/bin/python
class Card :
suitList = ["Clubs","Diamonds","Hearts","Spades"]
rankList =["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,rankList=0,suitList=0):
self.rankList = rankList
self.suitList = suitList
def __str__ (self):
return self.rankList[self.rank] + " of " +(self.suitList[self.suit]
card = Card(1,11)
print card1
این ارور رو میده:
کد : File "./11111.py", line 16
card = Card(1,11)
^
SyntaxError: invalid syntax
- مهمان - 2007-02-25
شاید اشکالش این باشد که چون پایتون مفسری است توی تابع __init__ نوع(type)rankList و suitList عوض شده است به نوع مثلا int. پس دیگر شما مجاز نیستید فرض کنید که هنوز یک لیست دارید، فکر کنم با عوض کردن اسم متغییر هایتان مشکل حل شود.
- jadi - 2007-02-25
راستش اشکالاتش کمی زیاده. البته نه خیلی.
من برات دوباره نوشته امش. یک نگاه بنداز و اگر مشگلی داشتی بگو:
[ltr]کد : #!/usr/bin/python
class Card :
suitList = ["Clubs","Diamonds","Hearts","Spades"]
rankList =["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,newRank=0, newSuit=0):
self.rank = newRank
self.suit = newSuit
def __str__ (self):
return self.rankList[self.rank]+' of '+self.suitList[self.suit]
card = Card(10,1)
print card
[/ltr]
- bayazee - 2007-02-26
داخل تابع __str__ و در تناها دستورت 2 تا مشكل هست . self.rank قبلا تعريف نشده . و آخرش يه پارانتز رو نبستي .
كمي دقت كن تو كد هات . باز مشكلي بود بگو
- مهمان - 2007-03-02
سلام
جناب بیاضی (درست نوشتم؟)میشه یه نگاه هم به این کد بندازید خروجی درست نیست :
[ltr]کد : #!/usr/bin/python
class Card:
suitList = ["narf","Clubs","Diamonds","Hearts","Spades"]
rankList = ["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,newSuit=0,newRank=0):
self.rank = newRank
self.suit = newSuit
class Deck :
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(1,14):
self.cards.append(Card(suit,rank))
def __str__(self):
s = ""
for i in range(len(self.cards)):
s = s + " "*i + str(self.cards[i]) + "\n"
return s
deck = Deck()
print deck
[/ltr]
راستی فروم سایت pylearn هنوز بالا نیومده؟کی میاد؟
- bayazee - 2007-03-03
سلام
این خط رو به کلاس Card اضافه کن :
کد : def __str__(self):
return self.suitList[self.suit] + ' ' + self.rankList[self.rank]
دقیقا نگرفتم می خوای چیرو چاپ کنی . در مورد برنامت هم یه توزیح مختصر بده که می خوای چی کار بکنه ...
راستی فروم سایت <!-- w --><a class="postlink" href="http://www.pylearn.com">www.pylearn.com</a><!-- w --> هم راه افتاد .
- مهمان - 2007-03-03
سلام
ممنون از جوابتون
به این صورت باشه وکارت هارو به صورت ابشاری چاپ کنه:
[ltr]
کد : >>> deck = Deck()
>>> print deck
Ace of Clubs
2 of Clubs
3 of Clubs
4 of Clubs
5 of Clubs
6 of Clubs
7 of Clubs
8 of Clubs
9 of Clubs
10 of Clubs
Jack of Clubs
Queen of Clubs
King of Clubs
Ace of Diamonds
[/ltr]
یکی از مثالهای کتاب How to think computer scientist در فصل ۱۵ است
- مهمان - 2007-03-03
[ltr]
#!/usr/bin/python
class Card:
suitList = ["narf","Clubs","Diamonds","Hearts","Spades"]
rankList = ["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,newSuit=0,newRank=0):
self.rank = newRank
self.suit = newSuit
def __str__(self):
return self.rankList[self.rank] + ' of ' + self.suitList[self.suit]
class Deck :
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(1,14):
self.cards.append(Card(suit,rank))
def __str__(self):
s = ""
for i in range(len(self.cards)):
s = s + " "*i + str(self.cards[i]) + "\n"
return s
deck = Deck()
print deck
[/ltr]
- bayazee - 2007-03-03
سلام
بالايي من بودم ! انگاري تگ ها قاطي شد !
[ltr]
کد : #!/usr/bin/python
class Card:
suitList = ["narf","Clubs","Diamonds","Hearts","Spades"]
rankList = ["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,newSuit=0,newRank=0):
self.rank = newRank
self.suit = newSuit
def __str__(self):
return self.rankList[self.rank] + ' of ' + self.suitList[self.suit]
class Deck :
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(1,14):
self.cards.append(Card(suit,rank))
def __str__(self):
s = ""
for i in range(len(self.cards)):
s = s + " "*i + str(self.cards[i]) + "\n"
return s
deck = Deck()
print deck
[/ltr]
ببين منظورت همينه ؟
- مهمان - 2007-03-03
ممنون بابت جوابتون
- مهمان - 2007-03-19
سلام بر همگی
تو این کد که برای بازی OldMaid هست از فصل ۱۶ کتاب how to think CS من میخوام با متد removeMatches کارتهایی که خال یک رنگ دارند و عدد مشابه دارند رو حذف کنم اما این متد درست کار نمیکونه و حتی اگر کارتهایی برای حذف تو دسته باشه هم چیزی رو حذف نمیکه.
[ltr]
کد : #!/usr/bin/python
class Card:
suitList = ["Clubs","Diamonds","Hearts","Spades"]
rankList = ["narf","Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
def __init__ (self,newSuit=0,newRank=0):
self.rank = newRank
self.suit = newSuit
def __str__(self):
return self.rankList[self.rank] + ' of ' + self.suitList[self.suit]
class Deck :
def popCard(self):
return self.cards.pop()
def isEmpty(self):
return (len(self.cards) == 0)
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(1,14):
self.cards.append(Card(suit,rank))
def __str__(self):
s = ""
for i in range(len(self.cards)):
s = s + " "*i + str(self.cards[i]) + "\n"
return s
def shuffle(self):
import random
nCards = len(self.cards)
for i in range(nCards):
j = random.randrange(i,nCards)
self.cards[i] , self.cards[j] = self.cards[j] , self.cards[i]
return self
def removeCard(self,card):
if card in self.cards:
self.cards.remove(card)
return 1
else:
return 0
def deal (self,hands,nCards=999):
nHands = len(hands)
for i in range(nCards):
if self.isEmpty():
break
card = self.popCard()
hand = hands[i % nHands]
hand.addCard(card)
class Hand(Deck):
def __init__(self,name=""):
self.cards = []
self.name = name
def __str__(self):
s = "Hand " + self.name
if self.isEmpty():
s = s + " is empty\n"
else:
s = s + " contains\n"
return s + Deck.__str__(self)
def addCard(self,card):
self.cards.append(card)
class CardGame:
def __init__(self):
self.deck = Deck()
self.deck.shuffle()
class OldMaidHand(Hand):
def removeMatches(self):
count = 0
originalCards = self.cards[:]
for card in originalCards:
match = Card(3 - card.suit,card.rank)
if match in self.cards:
self.cards.remove(card)
self.cards.remove(match)
count = count + 1
print "Hand %s: %s matches %s" %(self.name,card,match)
return count
game = CardGame()
hand = OldMaidHand("frank")
game.deck.deal([hand], 13)
print hand
[/ltr]
[ltr]
[/ltr]
[ltr]
کد : >>> hand.removeMatches()
0
[/ltr]
|