我试图在python中制作一个程序,在该程序中,当用户按enter键时,计算机会显示一张随机卡。同一张卡不能打印两次。到目前为止我的代码是:
from random import *
used = []
number = randint(1,13)
if number == 11:
number = 'Jack'
elif number == 12:
number = 'Queen'
elif number == 13:
number = 'King'
suit = randint(1,4)
if suit == 1:
suit = 'Hearts'
elif suit == 2:
suit = 'Spades'
elif suit == 3:
suit = 'Diamonds'
elif suit == 4:
suit = 'Clubs'
end = False
while end == False :
get = raw_input('Press enter to get a card')
if get == 'end':
end == True
continue
card = number , suit
for i in (used):
if card == i:
continue
used.append(card)
print card
到目前为止,它只输出相同的卡,每次用户按回车和程序不结束时,用户键入‘结束’。有人能发现错误吗?
发布于 2015-10-13 17:26:14
问题是,在while循环中分配
card = number, suit
但是在您进入循环之前,number
和suit
只被选中一次,因此永远不会改变。每次循环时都需要重新分配number
和suit
。
另外,您在used
中迭代卡片,但是最初没有卡片,所以循环永远不会执行。而且,由于将card
添加到used
的惟一位置是在for
循环中,所以它永远不会向used
添加任何内容。
发布于 2015-10-13 17:37:51
其他人已经解释了为什么您的代码失败。这里有一种不同的方法。
只需生成一个平台,使用random.shuffle
对其进行洗牌,并根据需要进行迭代:
import random
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace']
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
deck = [rank, suit for rank in ranks for suit in suits]
random.shuffle(deck)
for card in deck:
if raw_input('Press <enter> to get a card') == '': # enter pressed
print card
else:
break
else: # for loop not broken.
print 'all cards have been dealt'
发布于 2015-10-13 17:27:54
只需将卡选项放入时间循环即可。就像摩根说的。就像这样:
from random import *
used = []
end = False
while end == False :
number = randint(1,13)
if number == 11:
number = 'Jack'
elif number == 12:
number = 'Queen'
elif number == 13:
number = 'King'
suit = randint(1,4)
if suit == 1:
suit = 'Hearts'
elif suit == 2:
suit = 'Spades'
elif suit == 3:
suit = 'Diamonds'
elif suit == 4:
suit = 'Clubs'
get = raw_input('Press enter to get a card')
if get == 'end':
end == True
continue
card = number , suit
for i in (used):
if card == i:
continue
used.append(card)
print card
https://stackoverflow.com/questions/33108840
复制相似问题