2016-09-28 2 views
0

Я начинаю писать на питоне, попробуйте написать небольшой карточный игровой код (только для игры). Правила следующие: (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

В python 2.7 одно значение должно быть в поплавке.

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

Вы можете преобразовать значение плавать просто, как,

>>> float(5) 
5.0 

если вы получаете повторения в результате добавить результат в список делает его уникальным и напечатать уникальный способы получения 24.

Смежные вопросы