我是一名蟒蛇初学者,尝试写一个小卡片游戏代码(仅供玩耍)。规则如下:(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'
答案 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的独特方式。