2016-09-28 99 views
0

我是一个python初学者,试着写一个小卡片游戏代码(仅供玩)。规则如下:(1)编号为1-10的4张牌。 (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' 

回答

0

在Python 2.7中,一个值应该是浮动的。

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

您可以转换价值浮动单纯的喜欢,

>>> float(5) 
5.0 

如果你得到重复的结果,追加结果为列表使其具有唯一性,并打印出唯一获得方式24.