2016-09-28 4 views
0

私はPythonの初心者です、小さなカードのゲームコード(ちょうど再生のために)を書き込もうとします。規則は以下の通りです:(1)番号1〜10のカード4枚。 (2)任意の番号を使用する必要があり、一度しか使用できません。 (3) '+'、 ' - '、 '*'、 '/'の2つの数字の間で使用することができます (4)正確な数字 '24'とんでもない'。小さなpythonカードのゲームプログラム

私はいくつかのコードを書いていましたが、結果は満足できず、繰り返しの方法がたくさんあり、間違った扱いをしました(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

1つの値はfloatである必要があります。

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

あなたは結果に繰り返しを取得している場合は、リストAPPEND結果は、それがユニークにすると独特の印刷

>>> float(5) 
5.0 

、単に好きfloatに値を変換することができます取得の方法24.

関連する問題