首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -随机卡

Python -随机卡
EN

Stack Overflow用户
提问于 2015-10-13 17:22:18
回答 3查看 2.6K关注 0票数 1

我试图在python中制作一个程序,在该程序中,当用户按enter键时,计算机会显示一张随机卡。同一张卡不能打印两次。到目前为止我的代码是:

代码语言:javascript
运行
复制
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

到目前为止,它只输出相同的卡,每次用户按回车和程序不结束时,用户键入‘结束’。有人能发现错误吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-13 17:26:14

问题是,在while循环中分配

代码语言:javascript
运行
复制
card = number, suit

但是在您进入循环之前,numbersuit只被选中一次,因此永远不会改变。每次循环时都需要重新分配numbersuit

另外,您在used中迭代卡片,但是最初没有卡片,所以循环永远不会执行。而且,由于将card添加到used的惟一位置是在for循环中,所以它永远不会向used添加任何内容。

票数 2
EN

Stack Overflow用户

发布于 2015-10-13 17:37:51

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

只需生成一个平台,使用random.shuffle对其进行洗牌,并根据需要进行迭代:

代码语言:javascript
运行
复制
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'
票数 2
EN

Stack Overflow用户

发布于 2015-10-13 17:27:54

只需将卡选项放入时间循环即可。就像摩根说的。就像这样:

代码语言:javascript
运行
复制
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
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33108840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档