انجمن کاربران لینوکس ایران - تکنوتاکس سابق
مشکل این برنامه چیه؟ - نسخه قابل چاپ

+- انجمن کاربران لینوکس ایران - تکنوتاکس سابق (https://forum.sito.ir)
+-- انجمن: پرسش‌ها و پاسخ‌ها (https://forum.sito.ir/forumdisplay.php?fid=3)
+--- انجمن: لینوکس و برنامه نویسی (https://forum.sito.ir/forumdisplay.php?fid=13)
+--- موضوع: مشکل این برنامه چیه؟ (/showthread.php?tid=8976)



مشکل این برنامه چیه؟ - مهمان - 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]
کد :
python -i 16-6D.py
[/ltr]
[ltr]
کد :
>>> hand.removeMatches()
0
[/ltr]