#python #for-loop #file-handling
Вопрос:
words = [] with open("test.txt", "r") as rfile: n_words = rfile.read().count("*") for n in range(0, n_words): words.append(input("Type word: ")) for line in rfile.readlines(): ind = [x for x, ch in enumerate(line) if ch == "*"] if ind: print(ind)
Когда я запускаю этот код, я получаю следующее: Введите слово: asd Введите слово: asd Введите слово: asd Введите слово: asd Введите слово: грустно Введите слово: asd Введите слово: asd
Программа не запускается во второй раз за цикл. Какой бы цикл for я ни поставил первым, второй не выполняется. Кто-нибудь знает, почему?
Комментарии:
1. Я думаю, это потому
read()
, что уже израсходовал весь файл, так что обрабатывать больше нечегоreadlines()
.2. «rfile» уже был полностью «прочитан ()», так что «readlines()» больше ничего не читает (будет то же самое в порядке замены). Вы должны вернуть указатель файла в начало с метода «искать».
Ответ №1:
Я не уверен, что вы пытаетесь подсчитать, поэтому не стесняйтесь адаптировать его к своей проблеме, но вы можете перебирать каждую строку и подсчитывать количество слов, чтобы сохранить их, а затем запустить другой цикл for. Например, этот код выведет индекс "*"
в каждой строке (если его нет, он ничего не напечатает, но не скажет вам, в какой строке его нет), а затем попросит вас ввести такое же количество слов, какое есть "*"
(отдельно, если часть другой строки не будет их считать) в файле
words = [] n_lines = 0 n_words = 0 with open("text.txt", mode = "r") as rfile: for line in rfile: wordlist = line.split() n_lines = 1 n_words = wordlist.count("*") ind = [x for x, ch in enumerate(line.split()) if ch == "*"] if ind: print(ind) for n in range(0, n_words): words.append(input("Type word: "))