グローバル名「ランク」が定義されていません

user2734182

私はPythonプログラミングに不慣れで、このコードに問題があります。ランクとスーツはメソッドシャッフルでは機能しません。私の「単純な」(?)質問は、なぜですか?

from Tkinter import *
from Canvas import Rectangle, CanvasText, Group, Window
from PIL import Image
import ImageTk


win = Tk()
text = Text(win, width=65, height=15, font=("Arial", 10))
win.title("Play High or Low Card")
win.geometry("700x600")

class Card(object):

    RANKS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

    SUIT = ["Python/projekt/bilder/hearts.png", "Python/projekt/bilder/spades.png", "Python/projekt/bilder/diamond.png", "Python/projekt/bilder/clubs.png"]

    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit

    def __str__(self):
        rep = self.rank + self.suit
        return rep

    def draw(self,suit,rank):

        bg = ImageTk.PhotoImage(Image.open(self.suit).resize((10, 10)))

        cardGraph = Canvas(win, width=70, height=100, bg="White", bd=1, relief='solid', highlightthickness=2)
        cardGraph.photo=bg

        cardGraph.create_image(10,10, image=bg, anchor=CENTER) #left/up
        cardGraph.create_image(53,93, image=bg, anchor=CENTER) #right/down

        cardGraph.create_text(20, 10, text=self.rank, font=("Helvetica", 8, "bold")) #left/up
        cardGraph.create_text(63, 93, text=self.rank, font=("Helvetica", 8, "bold")) #right/down
        cardGraph.create_text(36, 50, text=self.rank, font=("Helvetica", 12, "bold")) #middle

        cardGraph.pack(side = "left", anchor=NW)

class Hand(object):
    def __init__(self):
        self.cards = []

    def __str__ (self):
        if self.cards:
            rep = ""
            for card in self.cards:
                rep += str(card) + " "
        else:
            rep = "<empty>"
        return rep

    def clear(self):
        self.cards = []

    def add(self, card):
        self.cards.append(card)

    def give(self, card, other_hand):
        self.cards.remove(card)
        other_hand.add(card)

class Deck(Hand, Card):

    def populate(self):
        for suit in Card.SUIT:
            for rank in Card.RANKS:
                self.add(Card(rank, suit))
                DrawCard = Card(rank,suit)
                DrawCard.draw(self,rank)

    def shuffle(self):
        import random
        random.shuffle(self.cards)
        DrawCard = Card(rank,suit)
        DrawCard.draw(self,rank)

    def deal(self, hands, per_hand = 1):
        for rounds in range(per_hand):
            for hand in hands:
                if self.cards:
                         top_card = self.cards[1]
                         self.give(top_card, hand)


                else:
                    print("Cant continue deck. Out of cards!!")



deck1 = Deck()
deck1.populate()
deck1.shuffle()

my_hand = Hand()
your_hand = Hand()
hands = [my_hand, your_hand]

deck1.deal(hands, per_hand = 5)

print(my_hand)


shuffleBtn = Button(win, text="Turn", command=lambda: deck1.shuffle())
shuffleBtn.pack()

mainloop()

トレースバックは次のとおりです。

Traceback (most recent call last):
  File "C:/Users/RaJ/Desktop/Cards", line 95, in deck1.shuffle()
  File "C:/Users/RaJ/Desktop/Cards", line 77, in shuffle
     DrawCard = Card(rank,suit)
NameError: global name 'rank' is not defined
user2736953

クラスデッキではランクとスーツは不明です。シャッフルで存在することを期待しているようです。新しいカードを作成するのではなく、シャッフル後に最初のカードを取得する必要があると思います。すなわち。

    def shuffle(self):
      import random
      random.shuffle(self.cards)
      DrawCard = self.cards[0]
      DrawCard.draw()

クラスカードは、スートとランクを渡さないように変更する必要があります。これらは使用されません。self.rankとself.drawが使用されます。

    def draw(self):

そのクラスで必要なのはそれだけです

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「グローバル名が定義されていません」エラー

分類Dev

グローバル名「モック」が定義されていません

分類Dev

内部クラスの使用法python。グローバル名が定義されていません

分類Dev

名前エラー:グローバル名「ローダー」が定義されていません

分類Dev

NameError:グローバル名「ロガー」が定義されていません

分類Dev

グローバル名エラーは定義されていても定義されていません

分類Dev

名前エラー:グローバル名「BaseFunction」が定義されていません

分類Dev

NameError:グローバル名 'unicode'が定義されていません-Python 3

分類Dev

python:NameError:グローバル名 '...'が定義されていません

分類Dev

Python:NameError:グローバル名 'foobar'が定義されていません

分類Dev

NameError:グローバル名 'numpy'が定義されていません

分類Dev

グローバル名 'reverse'が定義されていません

分類Dev

NameError:グローバル名 'EventLoop'が定義されていません-pyglet

分類Dev

NameError:グローバル名 'valid_month "が定義されていません

分類Dev

Google Dataflow:グローバル名が定義されていません-apachebeam

分類Dev

NameError:名前が定義されていませんグローバル宣言

分類Dev

pythonwxpythonグローバル名が定義されていません

分類Dev

Python NameError:グローバル名 '解決'が定義されていません

分類Dev

NameErrorグローバル名 'ImageDraw'が定義されていません

分類Dev

Python、Tkinter:NameError:グローバル名 'Combobox'が定義されていません

分類Dev

Tkinterグローバル名keeptimeが定義されていません

分類Dev

NameError:グローバル名 'This_is_a_Function_Name'が定義されていません

分類Dev

NameError:グローバル名 'profiles'が定義されていません

分類Dev

Python:グローバル名 'foobar'が定義されていません

分類Dev

Python:グローバル名 'foobar'が定義されていません

分類Dev

グローバル名「inf」が定義されていません

分類Dev

Python2.7グローバル名が定義されていません

分類Dev

グローバル名 '_tt_modules'が定義されていません

分類Dev

Pythonグローバル名が定義されていません

Related 関連記事

  1. 1

    「グローバル名が定義されていません」エラー

  2. 2

    グローバル名「モック」が定義されていません

  3. 3

    内部クラスの使用法python。グローバル名が定義されていません

  4. 4

    名前エラー:グローバル名「ローダー」が定義されていません

  5. 5

    NameError:グローバル名「ロガー」が定義されていません

  6. 6

    グローバル名エラーは定義されていても定義されていません

  7. 7

    名前エラー:グローバル名「BaseFunction」が定義されていません

  8. 8

    NameError:グローバル名 'unicode'が定義されていません-Python 3

  9. 9

    python:NameError:グローバル名 '...'が定義されていません

  10. 10

    Python:NameError:グローバル名 'foobar'が定義されていません

  11. 11

    NameError:グローバル名 'numpy'が定義されていません

  12. 12

    グローバル名 'reverse'が定義されていません

  13. 13

    NameError:グローバル名 'EventLoop'が定義されていません-pyglet

  14. 14

    NameError:グローバル名 'valid_month "が定義されていません

  15. 15

    Google Dataflow:グローバル名が定義されていません-apachebeam

  16. 16

    NameError:名前が定義されていませんグローバル宣言

  17. 17

    pythonwxpythonグローバル名が定義されていません

  18. 18

    Python NameError:グローバル名 '解決'が定義されていません

  19. 19

    NameErrorグローバル名 'ImageDraw'が定義されていません

  20. 20

    Python、Tkinter:NameError:グローバル名 'Combobox'が定義されていません

  21. 21

    Tkinterグローバル名keeptimeが定義されていません

  22. 22

    NameError:グローバル名 'This_is_a_Function_Name'が定義されていません

  23. 23

    NameError:グローバル名 'profiles'が定義されていません

  24. 24

    Python:グローバル名 'foobar'が定義されていません

  25. 25

    Python:グローバル名 'foobar'が定義されていません

  26. 26

    グローバル名「inf」が定義されていません

  27. 27

    Python2.7グローバル名が定義されていません

  28. 28

    グローバル名 '_tt_modules'が定義されていません

  29. 29

    Pythonグローバル名が定義されていません

ホットタグ

アーカイブ