2016-09-28 93 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.