2014-07-28 2 views
1

Итак, я пишу очень простую экономичную систему для своей игры, и она сохраняет имя файла как просто имя переменной (до добавления «: MinecraftText-turePack.txt») , Я выполнил печать через него (после смены имени), и переменная была изменена, но она все же дала мне неправильное имя файла. Есть предположения? Благодарю.Переменное имя, кажется, перезаписывается

if response == "save_pack": 
    print("What do you want to call it?") 
    name = input() 
    name = name + ":MinecraftText-turePack.txt" 
    pack = open(name, "w") 
    for each in inventory: 
     name, amount, recipe = each 
     pack.write(name) 
    pack.close() 

Редактировать: Возможно, еще одна важная деталь; он создает файл с неправильным именем

+0

Неверное значение u для переменной 'name'? – Nilesh

+0

Он просто возвращает то, что вводится – Griftor

+0

Какое значение имеет инвентарь? – xecgr

ответ

2

Из инструкции print, используемой в качестве функции Предполагаю, что мы работаем с Python 3. Перемещение приглашения является необязательным, но удаляет строку кода. Кроме того, для ясности я переименовал вторую переменную name в pname и начал новую переменную для имени файла fname. Таким образом, вы можете проверить каждый. Также попробуйте принимать двоеточие в имени файла (как это было предложено Michael)

if response == "save_pack": 
    name = input("What do you want to call it?\n") 
    fname = name + "-MinecraftText-turePack.txt" 
    pack = open(fname, "w") 
    for each in inventory: 
     pname, amount, recipe = each 
     pack.write(pname) 
    pack.close() 

Хотя этот ответ немного более ясно, ваш оригинальный пример бежал из Linux строки просто отлично. Большинство не-unix-систем не любят : в именах файлов. Вот некоторые background для Windows в частности.

+0

Это, похоже, не признает raw_input как действительную команду. Точная ошибка: NameError: имя «raw_input» не определено – Griftor

+0

извините, похоже, что вы используете Python 3, а 'raw_input' больше нет. Что произойдет, если вы разделите переменные, чтобы мы могли протестировать их. Например, 'name = input()'; 'fname = name +": Minecra ... "' – Gabriel

1

Я предполагаю, что вы используете Windows. У вас есть двоеточие (:) в имени вашего файла. Это зарезервированный символ и фактически указывает поток файлов.

File Streams

Попробуйте использовать другой символ в имени.

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