2015-10-13 73 views
1

我想在python中制作一个程序,在这个程序中,当用户按下回车键时,电脑会显示一张随机卡片。同一张卡不能打印两次。到目前为止我的代码是:Python - 随机卡

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 

到目前为止,它只在用户每次按下回车时输出相同的卡和程序没有结束当用户键入“结束”。任何人都可以找到错误吗?

+0

好吧,你只产生一次卡。 –

+0

用户在第53次按“Enter”时会发生什么 –

+2

生成一个套牌会更好,使用'random.shuffle'对其进行洗牌并根据需要进行迭代。 –

回答

2

的问题是,在while循环分配

card = number, suit 

numbersuit是你进入循环前采摘一次,因此永远不会改变。每次循环时,您需要重新分配numbersuit

此外,您正在迭代used中的卡片,但最初没有卡片,因此循环将永远不会执行。并且由于您添加cardused的唯一位置在for循环内,因此它永远不会向used添加任何内容。

-1

只需将卡片选项放入while循环即可。正如摩根所说。像这样:

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 
+0

这仍然允许重复:'按回车键以获得卡 (9“俱乐部”) 按回车键以获得卡 (8,“俱乐部”) 按回车键以获得卡 (8,“俱乐部” ) 按回车得到一张卡片 ('King','Clubs')' – Andy

2

其他人已经解释了为什么你的代码失败。这是一种不同的方法。

就产生甲板,使用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'