硬币翻转/卡片拾取程序不工作



我的任务是用非常基本的python风格编写一个程序。该程序应该询问用户是否想要1。扔一枚硬币,或者2枚。挑选一张卡片。

然后使用IF检查用户选择的内容。如果它是一个,它应该随机生成头或尾,并打印它得到的东西。

如果选择是2,它会要求用户选择一套西装,然后生成一个介于1和13之间的数字(王牌对王),并打印"你选择了[西装]的[价值]"

import random
print('1. Flip a coin')
print('2. Pick a card')
choice = int(input('Enter a coice :'))
if choice == 1:
    Hort = ''
    HorT == random.randint(0,1)
    if HorT == "0":
       print('You got Heads')
    elif HorT == "1":
       print('You got Tails')
elif choice == 2:
    print()
    print('1. Hearts')
    print('2. Clubs')
    print('3. Diamonds')
    print('4. Spades')
    print()
    suitno = ''
    suitno ==int(input('Choose a suit'))
    if suitno == "1":
        suit == "Hearts"
    elif suitno == '2':
        suit == 'Clubs'
    elif suitno == '3':
        suit == 'Diamonds'
    elif suitno == '4':
        suit == 'Spades'
    value = ''
    value == random.randint(1,13)
    print()
    print('You picked', value, 'of', suit)

正如你所看到的,这是基本的,但我被要求尽可能地遵循伪代码。它一开始就停止了。我输入了选择的号码,它就结束了。

编辑:我修改了代码以显示我所做的更改。

您有两个问题:

choice = int(input('Enter a coice :'))
if choice == '1':

在这里,您正在比较整数选择和字符串"1"的值。

第二个问题,你有很多结构,看起来像:

if a == '1':
   some_statement
elif a == '2:
   some statement
...

这样的开关可以用字典在python中形成:

import random
coin_sides = {
    '1': 'Heads',
    '2': 'Tails'
}
card_suits = {
    '1': 'Hearts',
    '2': 'Clubs',
    '3': 'Diamonds',
    '4': 'Spades'
}
print('1. Flip a coin')
print('2. Pick a card')
choice = input('Enter a coice :')
if choice == '1':
    side = random.randint(0,1)
    print 'You got {0}'.format(coin_sides.get(side))
elif choice == '2':
    print()
    print('1. Hearts')
    print('2. Clubs')
    print('3. Diamonds')
    print('4. Spades')
    print()
    suitno = input('Choose a suit')
    suit = card_suits.get(suitno)
    value = random.randint(1,13)
    print()
    print('You picked', value, 'of', suit)

由于其他答案足以批评你的选卡设计,我只发布我对你的硬币翻转的看法。

翻转硬币

这个项目的结果是一个统计:

CCD_ 1。

因此,我们只对字符串'heads''tails'感兴趣。由于显式优于隐式

outcomes = ('heads', 'tails')
print('You got {}.'.format(random.choice(outcomes)))

就是你所需要的。

常见错误:

  1. ==用于比较,用于分配,例如4 == 4True
  2. int类型的变量将从不等于字符串,例如4 == '4'False。这就是为什么You got {heads|tails}0语句没有执行的原因
  3. 在获得input()之前,不需要进行变量初始化
  4. 如果你有elif,通常最好有else

脏,但完全修复:

import random
print('1. Flip a coin')
print('2. Pick a card')
choice = int(input('Enter a coice: '))
if choice == 1:
    HorT = random.randint(0,1)
    if HorT == 0:
        print('You got Heads')
    else:
        print('You got Tails')
elif choice == 2:
    print()
    print('1. Hearts')
    print('2. Clubs')
    print('3. Diamonds')
    print('4. Spades')
    print()
    suitno = int(input('Choose a suit: '))
    if suitno == 1:
        suit = "Hearts"
    elif suitno == 2:
        suit = 'Clubs'
    elif suitno == 3:
        suit = 'Diamonds'
    else:
        suit = 'Spades'
    value = random.randint(1, 13)
    print()
    print('You picked', value, 'of', suit)

它可以写得更简洁,但它是pretty basic python style程序:)

@两位炼金师-@vaultah版本:

import random
print('1. Flip a coin')
print('2. Pick a card')
choice = int(input('Enter a choice: '))
if choice == 1:
    outcomes = ('heads', 'tails')
    print('You got {}.'.format(random.choice(outcomes)))
else:
    suits = ('Hearts', 'Clubs', 'Diamonds', 'Spades')
    print()
    for index, element in enumerate(suits, start=1):
        print('{}. {}'.format(index, element))
    suitno = int(input('Choose a suit: '))
    value = random.randint(1, 13)
    print('nYou picked', value, 'of', suits[suitno-1])

这是另一个重组版本:

from random import choice
COINS = ["Heads", "Tails"]
FACES = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
SUITS = ["Hearts", "Clubs", "Diamonds", "Spades"]
def get_int(prompt, lo=None, hi=None):
    while True:
        try:
            value = int(input(prompt))
            if (lo is None or lo <= value) and (hi is None or value <= hi):
                return value
        except ValueError:
            pass
def do_menu(prompt, options):
    print("")
    for i,option in enumerate(options, 1):
        print("{:>3}. {}".format(i, option))
    return get_int(prompt, 1, len(options)) - 1
def main():
    while True:
        option = do_menu("> ", ["Flip a coin", "Pick a card", "Quit"])
        if option == 0:
            print("nYou flipped {}.".format(choice(COINS)))
        elif option == 1:
            suit = SUITS[do_menu("Pick a suit: ", SUITS)]
            print("nYou picked {} of {}".format(choice(FACES), suit))
        else:
            print("nGoodbye!")
            break
if __name__=="__main__":
    main()

相关内容

最新更新