2015-06-25 3 views
-3
ST = 5 
statAdd = 5 

Было больше, чем я набрал, но ни один из них не был релевантным, поэтому я просто скопировал это.«Недостаточно очков» Python

while statAdd > 0: 
    addStat = raw_input("""You may distribute %s points to your base stats. Which do you add to? 
""" %(statAdd)) 
    if addStat == 'strength': 
      pointDeduction = raw_input("How many points do you wish to add to Strength? (Up to %s points)" %(statAdd)) 
      if pointDeduction <= statAdd: 
        ST += pointDeduction 
        statAdd -= pointDeduction 
      else: 
        print "You do not have that many points to distribute to Strength." 

Можно было бы подумать, что он должен добавить очки, но я получаю ту же ошибку «Вы не имеете, что многие пункты для распространения силы», когда я явно. Что я здесь делаю неправильно?

+0

Извлеките еще больше кода, чтобы увидеть, где именно вы ошибетесь. Удалите вещи, которые, как вы знаете, не попали. – TankorSmash

+0

Пожалуйста, найдите более подробное название для вашего вопроса. –

ответ

1

Пробуйте преобразовать входные данные в int? В противном случае это строка и выполнение арифметических операций на ней приведет к неожиданным результатам.

 while statAdd > 0: 
    addStat = int(raw_input("""You may distribute %s points to your base stats. Which do you add to? """ %(statAdd))) 
    if addStat == 'strength': 
      pointDeduction = int(raw_input("How many points do you wish to add to Strength? (Up to %s points)" %(statAdd))) 
      if pointDeduction <= statAdd: 
        ST += pointDeduction 
        statAdd -= pointDeduction 
      else: 
        print "You do not have that many points to distribute to Strength." 
0

raw_input возвращает строку.

Если присутствует аргумент приглашения, он записывается в стандартный вывод без конечной новой строки. Затем функция считывает строку из ввода, преобразует ее в строку (зачищая конечную новую строку) и возвращает ее.

Вашего if pointDeduction <= statAdd: заявление делает это сравнение:

"5" <= 5 

Это вернет False

Чтобы устранить эту проблему, необходимо обернуть входное заявление с int (если вы только что позволяете всем номера).

addStat = int(raw_input("""You may distribute %s points to your base stats. Which do you add to? """ %(statAdd))) 
0

В Python 2.x, raw_input() возвращает строку, выполняя таким образом вещи на нем, как это не будет работать. Вы должны использовать обычный input() вместо (на втором), который в Python 2.x автоматически выполняет Eval на входе:

while statAdd > 0: 
addStat = raw_input("""You may distribute %s points to your base stats. Which do you add to?""" %(statAdd)) 
if addStat == 'strength': 
     pointDeduction = input("How many points do you wish to add to Strength? (Up to %s points)" %(statAdd)) 
     if pointDeduction <= statAdd: 
       ST += pointDeduction 
       statAdd -= pointDeduction 
     else: 
       print "You do not have that many points to distribute to Strength." 

Это должно работать. Обратите внимание: в Python 3.x input() возвращает строку, а eval (input()) возвращает int.

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