Python 2.7 __getitem\ black jack项目中出现错误
我正在为我参加的在线课程写一个21点游戏。我知道我必须在某个时候引入对象,但现在我只是尝试为对象中的操作编写非常基本的代码。我也只有化学背景,绝对没有计算机科学背景 我试图做的是从元组的第一个条目中提取值文本值,然后给它分配一个数值,这样我就可以在创建玩家时开始比较分数。然而,我得到这个错误,我不完全知道它意味着什么…代码也在下面。这里还是个笨蛋,只是想学Python 2.7 __getitem\ black jack项目中出现错误,python-2.7,Python 2.7,我正在为我参加的在线课程写一个21点游戏。我知道我必须在某个时候引入对象,但现在我只是尝试为对象中的操作编写非常基本的代码。我也只有化学背景,绝对没有计算机科学背景 我试图做的是从元组的第一个条目中提取值文本值,然后给它分配一个数值,这样我就可以在创建玩家时开始比较分数。然而,我得到这个错误,我不完全知道它意味着什么…代码也在下面。这里还是个笨蛋,只是想学 27 def value_of_card(): --->28 x=交易[0] 29 30卡的打印值() TypeError:“函数”对象没
27 def value_of_card():
--->28 x=交易[0]
29
30卡的打印值()
TypeError:“函数”对象没有属性“getitem”
import random
suits = ['spades', 'hearts', 'clubs', 'diamonds']
ranks = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'Jack', 'Queen', 'King']
def deal():
deck = []
for suit in suits:
for rank in ranks:
deck.append((rank, suit))
random.shuffle(deck)
print deck
deal = deck[0]
print deal
for card in deck:
if deal in deck:
deck.remove(deal)
return deck
print deck
print deal[0]
print deal()
def value_of_card(deal):
return deal[0]
print value_of_card(deal)
您忘记在卡的
value\u
函数中调用您的deal
函数。您还应该将函数名称更改为不同的名称,因为现在有太多名为
deal
的对象,这确实会产生误导,使代码难以阅读 您忘记在卡的值函数中调用您的交易函数。
您还应该将函数名称更改为不同的名称,因为现在有太多名为deal
的对象,这确实会产生误导,使代码难以阅读 一些问题:
- 将函数引用传递给卡的值,而不是传递该函数返回的值
- 您的交易功能不会返回一张卡,而是返回剩余卡的牌组。您不应该
return deck
,而应该return deal
- 对所选卡片的搜索(使用
搜索
循环)不是必需的:您从索引0中获取了该卡片,因此只需删除索引0处的卡片(使用弹出(0)
)
以下是更正后的脚本:
import random
suits = ['spades', 'hearts', 'clubs', 'diamonds']
ranks = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'Jack', 'Queen', 'King']
def deal():
deck = []
for suit in suits:
for rank in ranks:
deck.append((rank, suit))
random.shuffle(deck)
# you don't need to search for the card. It is at index 0
# grab, remove and return the card (not the deck) in one go:
return deck.pop(0)
card = deal() # remember the dealt card
print card
def value_of_card(deal):
return deal[0]
print value_of_card(card) # pass the remembered card
下面是如果你让它更面向对象,它会是什么样子:
import random
class Card:
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __repr__(self):
return self.rank + ' of ' + self.suit
class Deck:
def __init__(self):
suits = ['spades', 'hearts', 'clubs', 'diamonds']
ranks = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'Jack', 'Queen', 'King']
self.__deck = [Card(rank, suit) for suit in suits for rank in ranks]
def shuffle(self):
random.shuffle(self.__deck)
def deal(self):
return self.__deck.pop()
# Create a deck of 52 cards
deck = Deck()
# Shuffle the deck
deck.shuffle()
# Pull a card from the deck
card = deck.deal()
# Show the card
print(card) # this calls the __repr__ method
# ..or only the rank:
print(card.rank)
一些问题:
- 将函数引用传递给卡的值,而不是传递该函数返回的值
- 您的交易功能不会返回一张卡,而是返回剩余卡的牌组。您不应该
return deck
,而应该return deal
- 对所选卡片的搜索(使用
搜索
循环)不是必需的:您从索引0中获取了该卡片,因此只需删除索引0处的卡片(使用弹出(0)
)
以下是更正后的脚本:
import random
suits = ['spades', 'hearts', 'clubs', 'diamonds']
ranks = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'Jack', 'Queen', 'King']
def deal():
deck = []
for suit in suits:
for rank in ranks:
deck.append((rank, suit))
random.shuffle(deck)
# you don't need to search for the card. It is at index 0
# grab, remove and return the card (not the deck) in one go:
return deck.pop(0)
card = deal() # remember the dealt card
print card
def value_of_card(deal):
return deal[0]
print value_of_card(card) # pass the remembered card
下面是如果你让它更面向对象,它会是什么样子:
import random
class Card:
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __repr__(self):
return self.rank + ' of ' + self.suit
class Deck:
def __init__(self):
suits = ['spades', 'hearts', 'clubs', 'diamonds']
ranks = ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'Jack', 'Queen', 'King']
self.__deck = [Card(rank, suit) for suit in suits for rank in ranks]
def shuffle(self):
random.shuffle(self.__deck)
def deal(self):
return self.__deck.pop()
# Create a deck of 52 cards
deck = Deck()
# Shuffle the deck
deck.shuffle()
# Pull a card from the deck
card = deck.deal()
# Show the card
print(card) # this calls the __repr__ method
# ..or only the rank:
print(card.rank)
在deal
中,生成一整副牌来弹出第一副牌似乎有点浪费(当然,如果你继续从牌堆中重新处理,那就不同了)。。。当然,也可以只做card=random.choice(套装),random.choice(等级)
@JonClements,但是OP对牌组有更多的计划,然后只抽一张牌。看他问题的第一句话非常感谢您的帮助和小小的指导!我总是忘记当你创建一个函数时,你必须用一个变量来调用这个函数…doh!谢谢你,我能够重新编写一些代码行来实现我想做的事情,不管怎么说,它开始变得更有意义:)在deal
中生成一整副牌来弹出第一副牌似乎有点浪费(当然,如果你继续从牌堆中重新处理,那就不同了)。。。当然,也可以只做card=random.choice(套装),random.choice(等级)
@JonClements,但是OP对牌组有更多的计划,然后只抽一张牌。看他问题的第一句话非常感谢您的帮助和小小的指导!我总是忘记当你创建一个函数时,你必须用一个变量来调用这个函数…doh!谢谢,我能够重新编写一些代码行来实现我想要做的事情,不管怎样,它开始变得更有意义:)