2016-10-02 12 views
0

私はPythonの練習をしています。 私は、ゲームのすべてのフレーズがどうなるかを定義することから始めました。 今度はこのコードを実行すると、入力が '0'の場合 - これはカードがもう必要ないことを意味し、完全に実行されます。入力が「1」のときでも - あなたがカードを選ぶしたいことを意味する、私はエラーを取得する:PYTHON:AttributeError: 'int'オブジェクトに 'hand'という属性がありません

Traceback (most recent call last): 
    File "C:/Users/Maymon/PycharmProjects/untitled4/BlackJack.py", line 1, in <module> 
    class blackjack(object): 
    File "C:/Users/Maymon/PycharmProjects/untitled4/BlackJack.py", line 34, in blackjack 
    player(1) 
    File "C:/Users/Maymon/PycharmProjects/untitled4/BlackJack.py", line 25, in player 
    PickCard(1) 
    File "C:/Users/Maymon/PycharmProjects/untitled4/BlackJack.py", line 18, in PickCard 
    self.hand+= random.randrange(1, 13) 
AttributeError: 'int' object has no attribute 'hand' 

コード:事前に

class blackjack(object): 

    #this func defines how player should react 
    def player(self): 

     #this func defines what case of technical loosing 
     def loser(): 
      print("You have reached", hand , ". Which is beyond 21. Therefor, you have lost the game. Better luck next time!") 


     #this func is responsible for picking card issue. 
     def PickCard(self): 
      import random 
      x=1 
      while x == 1: 
       pick = int(raw_input("Enter 1 if you want another card, else Enter 0")) 
       if pick == 1: 
        self.hand = self.hand + random.randrange(1, 13) 
       else: 
        x=0 
     import random 
     print "Now your first card will automatically be given to you:" 
     hand=random.randrange(1,13) 
     print "hand: ", hand 
     PickCard(1) 
     print hand 
     if hand>21: 
      loser() 
     elif hand==21: 
      pass 
     else: 
      pass 

    player(1) 

感謝を。

+0

'self'は、その関数内の整数です。私はそれが方法ではないので、なぜあなたが「自己」という名前を使ったのか分かりません。 –

答えて

0

player関数では、引数がselfタイプ.i.eと予想されるので、関数呼び出しをplayer(1)としています。クラスblackjackのインスタンスです。したがって、self.hand = self.hand + random.randrange(1, 13)を実行している間、上記のエラーが発生しています。


私はあなたがクラス内からplayer()関数の呼び出しをしたくないと思いますが、これは?その部分をクラス外に移動します。まず、クラスblackjackのオブジェクトを作成します(注:Pythonでは、クラス名はBlackJackのようなCamelCase変数として定義する必要があります)。たとえば:

blackjack_obj = blackjack() 

は次にようplayer()関数を呼び出す:あなたは `PickCard(1)`と呼ばれるので

blackjack_obj.player() 
+0

まずは、ありがとうございます。今私はそれをその中に定義したので、クラスの外からプレーヤー()を呼び出すことはできません。私はあなたが 'code'(blackjack_obj) 'code'の意味を理解しておらず、 "self"については –

+0

'blackjack'がclassです。 'blackjack_obj = blackjack()'によって、私は 'blackjack_obj'として' blackjack'のオブジェクトを作成しています。クラスのオブジェクトを使ってクラス内で定義された関数を呼び出すことができます。 –

+0

クラスとそのオブジェクトについてより明確にするために、[Python Class Objects](https://docs.python.org/3/tutorial/classes.html#class-objects)も参照してください。 –

関連する問題