Как найти элемент в списке и заменить следующий итерируемый, если строка соответствует - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать функцию сохранения файла.В коде, который я сделал, я могу редактировать атрибут персонажа, и я пытаюсь сделать так, чтобы функция могла редактировать определенный атрибут, когда найден символ, и только атрибут этого конкретного символа.Вот текстовый файл, который код попытается отредактировать:

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

Все работает отлично, за исключением случаев, когда атрибуты одинаковы.Если оба атрибута силы равны нулю или любому другому совпадающему целому числу, код изменит оба.

Однако, если их атрибуты отличаются в начале, будет изменяться только сила выбранного героя, пока оба атрибута героя не совпадут, тогда код меняет оба.

Есть идеи, почему это происходит?Или что я могу сделать, чтобы избавиться от этой неприятности?Любая помощь будет принята с благодарностью!

...