小蟒蛇卡游戏程序

时间:2016-09-28 17:09:31

标签: python-2.7

我是一名蟒蛇初学者,尝试写一个小卡片游戏代码(仅供玩耍)。规则如下:(1)4张牌号为1-10的牌。 (2)必须使用任何数字,并且只能使用一次。 (3)只有' +',' - ',' *',' /'可以在两个数字之间使用 (4)列出获取确切数字的所有方法' 24'如果没有办法,请打印“没有方法”。

我写了一些代码,然而,结果并不令人满意,许多重复的方法和对待' /'错(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 个答案:

答案 0 :(得分:0)

在python 2.7中,一个值应该是float。

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

您可以将值转换为float,就像

一样
>>> float(5)
5.0

如果您在结果中重复,则追加将结果添加到列表,使其唯一并打印获得24的独特方式。