硬币翻转/卡片拣选程序无效

时间:2014-04-13 13:31:43

标签: python python-3.x

我被赋予了一个以非常基本的python风格编写程序的任务。该程序应该询问用户是否要1.掷硬币,或2.选择一张卡。

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

如果选择为2,则要求用户选择套装,然后生成1到13之间的数字(ace为王)并打印'你选择了[套装]的[值]

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)

正如您所看到的,它是基本的,但我被要求尽可能密切地遵循伪代码。它在开始时就停止了。我输入了数字作为选择,它就结束了。

编辑:我修改了代码以显示我已更改的内容。

4 个答案:

答案 0 :(得分:2)

你有两个问题:

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)

答案 1 :(得分:2)

由于other answers非常充分地批评你的采卡设计,我只会发布关于你的硬币翻转的信息。

翻转硬币

该计划的结果是一个声明:

  

You got {heads|tails}

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

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

就是你所需要的一切。

答案 2 :(得分:1)

常见错误:

  1. ==用于比较,用于分配,例如4 == 4 True
  2. int类型的变量从不等于字符串,例如4 == '4'False。这就是您的if语句无法执行的原因。
  3. 在获得input()之前,无需进行变量初始化。
  4. 如果您拥有else,通常最好拥有elif
  5. 肮脏但完全修复:

    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程序:)

    @Two-Bit Alchemist - @vaultah version:

    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])
    

答案 3 :(得分:0)

这是另一个重组版本:

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()
相关问题