2013-01-17 19 views
0

我想返回一個值,懂得回報從功能

cardn 

回到我的節目,在那裏我可以繼續的

__init___ 

一部分。這是一堂課。

'''the dealing''' 
    while card_count != 2: 
     deal = random.randint(1,13) 
     self.card_check(deal) 
     print(cardn) 
     card_count += 1 




def card_check(self, card): 
     if card == 1: 
      cardn = "Ace" 
     elif card == 11: 
      cardn = "Jack" 
     elif card == 12: 
      cardn = "Queen" 
     elif card == 13: 
      cardn = "King" 
     return cardn 

我只想要的是名片。

+5

你並不需要正確的話,你需要一個基本的[Python的教程](http://docs.python.org /2/tutorial/controlflow.html#defining-functions)。代碼應該是'cardn = self.card_check(deal)' – Matthias

回答

1

簡單!只要寫

cardn = self.card_check(deal) 
+0

-_- :(記住空白抱歉,我標記了這個問題,所以希望版主會把它記下來。真的很愚蠢的問題:我 – ReallyGoodPie

1

在你的情況下,我看到其他人與cardn = self.card_check(deal)迴應,但card_check()不做任何處理self。所以它只是功能。如果是方法,然後,而不是返回值可以設置類成員:

def card_check(self, card): 
    if card == 1: 
     self.cardn = "Ace" 
    elif card == 11: 
     self.cardn = "Jack" 
    elif card == 12: 
     self.cardn = "Queen" 
    elif card == 13: 
     self.cardn = "King" 
    else 
     self.cardn = str(card) 

注意cardn也爲其他號碼,但你可以檢查它是否是2和10之間的整數,提高異常,如果不。

也嘗試使用Python工具,如pylint。他們顯示一些警告,並應注意self未在您的方法中使用。

1

一些建議。您可以創建一個列表或散列表,將卡號映射到卡名稱。

def card_name(index): 
    card_names = { 1: "Ace", 11: "Jack" } 
    return card_names[index] 

你的處理(使用randint)的實現不是真的適合。它使每次抽籤的概率與先前抽籤無關。這對輪盤賭是正確的,但對二十一點不適用。在二十一點你可以用完ace :-)。

+0

啊是的...我只是有點亂搞:)但我一定會解決這個問題,並確保沒有重複卡被添加。 Thankyou:0 – ReallyGoodPie

+0

@ReallyGoodPie最好的辦法是在程序開始時創建一個卡組中所有卡片的列表。然後每次你想處理的時候,都要創建這個清單的一個副本('mycopy = list(mydeck)'),用['random.shuffle']來打亂它(http://docs.python.org/2/library/ random.html#random.shuffle),然後通過調用mycopy.pop()來處理卡片。 –

+0

甜蜜,我愛你如何從最愚蠢的問題開始,然後獲得大量的提示和技巧,讓你的程序更好!^ _ ^並學習20個新東西!這就是爲什麼我喜歡堆棧溢出:D – ReallyGoodPie

0

不同的方式,

def card_check(x): 
    return { 
     1 : 'Ace', 
     11 : 'Jack', 
     12 : 'Queen', 
     13 : 'King', 
    }[x] 


print card_check(1) 

輸出

Ace