我需要在两个电脑玩家之间进行二十一点游戏。我知道我该怎么做,但我无法弄清楚这个错误 每次我指定要发给玩家的牌时,它会正确累积总数,但每次都会抽出相同的牌。
代码
deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3,
'4 of Spades':4, '5 of Spades':5, '6 of Spades':6,
'7 of Spades':7, '8 of Spades':8, '9 of Spades':9,
'10 of Spades':10, 'Jack of Spades':10,
'Queen of Spades':10, 'King of Spades': 10,
'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3,
'4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6,
'7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9,
'10 of Hearts':10, 'Jack of Hearts':10,
'Queen of Hearts':10, 'King of Hearts': 10,
'Ace of Clubs':1, '2 of Clubs':2, '3 of Clubs':3,
'4 of Clubs':4, '5 of Clubs':5, '6 of Clubs':6,
'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9,
'10 of Clubs':10, 'Jack of Clubs':10,
'Queen of Clubs':10, 'King of Clubs': 10,
'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3,
'4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6,
'7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9,
'10 of Diamonds':10, 'Jack of Diamonds':10,
'Queen of Diamonds':10, 'King of Diamonds': 10}
hand_1 = 'string'
hand_1_value = 0
hand_1_total = 0
hand_2 = 'string'
hand_2_value = 0
hand_2_total = 0
while hand_1_total < 21:
k, v = deck.popitem()
hand_1 = k
hand_1_total = hand_1_total + v
print('Player 1 is dealt', hand_1)
print('Player 1 score is',hand_1_total)
输出:
Player 1 is dealt King of Diamonds
Player 1 score is 10
Player 1 is dealt Queen of Diamonds
Player 1 score is 20
Player 1 is dealt Jack of Diamonds
Player 1 score is 30
每次我运行它,它都会分配皇家钻石套件,我不明白为什么?我的教科书说dict.popitem()返回一个随机选择的键:值对作为声明变量的元组。
我的第一个想法是作为一个元组,变量在第一次迭代后无法改变。但这对我来说听起来不对,也没有解释为什么每次都选择相同的卡片。
答案 0 :(得分:0)
您获得了相同的模式,因为deck.popitem()
按deck.items()
中元素的顺序返回项目。
由于您的deck
每次都相同,deck.items()
也相同,因此popitem()
会返回相同序列的元素。
随机化的一种方法是:
import random
..
..
items = list(deck.items())
random.shuffle(items)
for k,v in items:
hand_1 = k
hand_1_total = hand_1_total + v
print('Player 1 is dealt', hand_1)
print('Player 1 score is',hand_1_total)