Итерируемые Поплавки?
Я пытаюсь сделать игру, в которой игрок вычитает.5 из значения в INI-файле каждый раз, когда он играет. Однако я продолжаю получать ошибку, и я не уверен, что делать. Это мой код Не беспокойтесь о комментариях, они для меня, и я закрываю цикл while позже. Это всего лишь часть кода. Кстати, код работает, только не это. Благодарю.
def rerun():
import ConfigParser
from ConfigParser import ConfigParser
parser = ConfigParser()
parser.read('Game.ini')
PlrMny = parser.get('money_value', 'Amount')
#config = ConfigParser.ConfigParser()
configFile = open("C:\Python27\Game.ini", "w")
#config.read(configFile)
#valueamount = config.getfloat("section","starting_value")
print "You will be given a $10 starting amount. Each game costs $.50 to play and is
deducted when you input the first value."
print "\nGetting one match gives $1 and the output is multiplied by 2 for each extra
match."
print "\nCurrent Amount =",PlrMny,
def gamble():
PlrMny = parser.get('money_value', 'Amount')
import random
import sys
number1 = random.randint (1, 20)
number2 = random.randint (1, 20)
number3 = random.randint (1, 20)
number4 = random.randint (1, 20)
number5 = random.randint (1, 20)
def input():
c = 0
print "\n\n\n\nTry guess what five numbers the computer will guess. Type '100'
in any of the inputs to close program prematurely"
print "Money =",PlrMny,
#parser.set("money_value", "Amount",10000)
#parser.write ('Game.ini')
while True:
try:
User11 = int(raw_input( "\n\nNumber 1 : "))
parser.set('money_value','Amount',float(PlrMny) - .5)
parser.write (configFile)
str(PlrMny)
if User11 < 1:
print "Error"
elif User11 == 100:
sys.exit()
elif User11 > 20:
print "Error"
else:
break
except ValueError:
print "Error"
Это ошибка:
Traceback (most recent call last):
File "C:\Python27\Gamb Game.py", line 183, in <module>
rerun()
File "C:\Python27\Gamb Game.py", line 182, in rerun
gamble()
File "C:\Python27\Gamb Game.py", line 19, in gamble
PlrMny = parser.get('money_value', 'Amount')
File "C:\Python27\lib\ConfigParser.py", line 623, in get
return self._interpolate(section, option, value, d)
File "C:\Python27\lib\ConfigParser.py", line 663, in _interpolate
if value and "%(" in value:
TypeError: argument of type 'float' is not iterable
3 ответа
Это должно решить вашу проблему:
parser.get('money_value','Amount',True)
Конечно, вы также можете использовать:
PlrMny = float(PlrMny) -.5
parser.set('money_value','Amount',str(PlrMny))
Проблема в том, что parser.get ожидает строковое значение, но читает число с плавающей точкой. Таким образом, у вас есть два варианта - сохранить значение в виде строки (это то, что делает 2-й вариант) или прочитать значение, используя raw=True (это то, что делает 1-й вариант).
Хорошо, вы создаете парсер в одной функции
def rerun():
import ConfigParser
from ConfigParser import ConfigParser
parser = ConfigParser()
parser.read('Game.ini')
и ты будешь использовать это в другом.
def gamble():
PlrMny = parser.get('money_value', 'Amount')
это должно завершиться сбоем, так как анализатор является локальной переменной при повторном запуске и не объявлен в игре.
Я понятия не имею, что проблема может быть в строке 19. Как выглядит ваш конфиг, и вы пытались
parser.getfloat('money_value','Amount')
?