малая программа игры карточек питона

Я новичок python, попробуйте написать небольшой код карточной игры (просто для игры). Правила следующие: (1) 4 карты с номером 1-10.
(2)любое число должно использоваться и может использоваться только один раз.
(3)только ‘+’,’-‘,’*’,’/’ может использоваться между двумя номерами
(4)перечислите все способы получить точное число ’24’, если нет способа, напечатайте ‘no Way’.

Я написал некоторый код, однако, результат не удовлетворил, много повторил способы и обработал ‘ / ‘ неправильно (5/2 должно быть 2.5 не 2). Может кто-нибудь помочь.

import itertools
def braStr(string1):
    return '(' + string1 + ')'

def steps(input,list1 = []):
    if len(input)==2:
        list1.append(braStr(input[0]+ '+' + input[1]))
        list1.append(braStr(input[0]+ '-' + input[1]))
        list1.append(braStr(input[0]+ '*' + input[1]))
        list1.append(braStr(input[0]+ '/' + input[1]))
    else:
        for e in itertools.permutations(input):
            steps((braStr(e[0]+ '+' + e[1]),) + e[2:],list1)
            steps((braStr(e[0]+ '-' + e[1]),) + e[2:],list1)
            steps((braStr(e[0]+ '*' + e[1]),) + e[2:],list1)
            steps((braStr(e[0]+ '/' + e[1]),) + e[2:],list1)

while True:
    cards = raw_input("Please enter the 4 cards: ").split()
    if len(cards) != 4:
        print "you need 4 cards to begin!"

    list1 = []
    steps(cards,list1)
    result = False
    for e in list1:
        try:
            if eval(e) == 24:
                print e + '=', eval(e)
                result = True
        except:
            continue
    if result is False:
        print 'No way'

1 ответ

  1. В python 2.7 одно значение должно быть в float.

    >>> 5/3
    1
    >>> 5.0/3
    1.6666666666666667
    >>> 5/3.0
    1.6666666666666667
    

    Вы можете конвертировать значение в float просто как,

    >>> float(5)
    5.0
    

    если вы получаете повторение в результате, добавьте результат в список сделать его уникальным и распечатать уникальные способы получения 24.