Я пытаюсь создать функцию сохранения файла.В коде, который я сделал, я могу редактировать атрибут персонажа, и я пытаюсь сделать так, чтобы функция могла редактировать определенный атрибут, когда найден символ, и только атрибут этого конкретного символа.Вот текстовый файл, который код попытается отредактировать:
iron_man
strength=0
hulk
strength=0
Код ищет символ, а затем находит атрибут после него.Он написан таким образом, что можно добавить неопределенное количество атрибутов без повторной записи кода.Вот оно:
from itertools import cycle
def write_file_contents(file, person, string):
with open(file, 'r') as r:
lines = [line.strip('\n') for line in r]
for i in range(len(lines)):
if lines[i] == person:
cycled = cycle(lines[i:])
for x in range(len(lines[i:])):
n = next(cycled)
if string in n:
line = n.replace(string + '=', '')
write_file_contents.added = str(int(line) + 1)
lines = [l.replace(n, string + '=' + write_file_contents.added) for l in lines]
break
lines[i] = lines[i] + '\n'
with open(file, 'w') as w:
for item in lines:
w.write(item)
stats = 'hero_stats.txt'
while True:
hero = input('What hero would you like to access? ')
if hero == 'iron man':
while True:
change = input('Which attribute would you like to update? ')
if change == 'strength':
write_file_contents(stats, 'iron_man', 'strength')
print('Iron Man now has ' + write_file_contents.added + ' strength!')
elif change == 'exit':
break
elif hero == 'hulk':
while True:
change = input('Which attribute would you like to update? ')
if change == 'strength':
write_file_contents(stats, 'hulk', 'strength')
print('Hulk now has ' + write_file_contents.added + ' strength!')
elif change == 'exit':
break
elif hero == 'end':
break
Все работает отлично, за исключением случаев, когда атрибуты одинаковы.Если оба атрибута силы равны нулю или любому другому совпадающему целому числу, код изменит оба.
Однако, если их атрибуты отличаются в начале, будет изменяться только сила выбранного героя, пока оба атрибута героя не совпадут, тогда код меняет оба.
Есть идеи, почему это происходит?Или что я могу сделать, чтобы избавиться от этой неприятности?Любая помощь будет принята с благодарностью!