我是python初学者,试着写一个小的纸牌游戏代码(只是为了玩)。规则如下:(1)4张数字为1-10的卡片。(2)任何号码都必须使用,且只能使用一次。(3)在两个数字之间只能使用'+','-','*','/‘。(4)列出所有获得确切数字'24’的方法,如果没有方法,则打印'no Way‘。
我写了一些代码,但是结果并不令人满意,很多重复的方法和错误的处理(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'发布于 2016-09-29 20:03:56
在python2.7中,一个值应该是浮点数。
>>> 5/3
1
>>> 5.0/3
1.6666666666666667
>>> 5/3.0
1.6666666666666667您可以简单地将值转换为浮点数,
>>> float(5)
5.0如果你在result中获得 result ,将结果追加到a list使其唯一,并打印出获得24的独特方法。
https://stackoverflow.com/questions/39753732
复制相似问题