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

DOLORES
DOLORES
GENERAL LUNA
GENERAL LUNA
GENERAL LUNA
GENERAL NAKAR
GENERAL NAKAR

И результат, который я хочу:

1
2
1
2
3
1
2

Я пробовал это, но результат другой:

fhand = open("input.txt")
fout = open("output.txt","w")

t = list()
ind = 0

for line in fhand:
    t.append(line)

for elem in t:
    if elem[0] or (not(elem[0]) and (elem[ind] == elem[ind-1])):
        ind += 1
    elif not(elem[0]) and (elem[ind] != elem[ind-1]):
        ind = 1
    fout.write(str(ind)+'\n')
fout.close()

Как я могу получить желаемый результат?

0
JAT86 3 Май 2021 в 00:27

2 ответа

Лучший ответ

Основная проблема заключается в том, что вы говорите , что хотите проверить идентичные строки, но ваш код имеет дело с отдельными символами. Тривиальная трассировка вашей программы показывает это. См. Эту прекрасную ссылку для помощи по отладке.

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

t = [
    "DOLORES",
    "DOLORES",
    "GENERAL LUNA",
    "GENERAL LUNA",
    "GENERAL LUNA",
    "GENERAL NAKAR",
    "GENERAL NAKAR",
    ]

prev = None    # There is no previous line on the first iteration
count = 1
for line in t:
    if line == prev:
        count += 1
    else:
        count = 1
        prev = line
    print(count)

Выход:

1
2
1
2
3
1
2
1
Prune 2 Май 2021 в 21:42

Отредактируйте свои условия следующим образом:

fout.write(str(1)+'\n')
for elem in range(1,len(t)):
    if t[elem]==t[elem-1]:
        ind += 1
    else:
        ind = 1
    fout.write(str(ind)+'\n')
0
zazz 2 Май 2021 в 21:32