Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
argulator
0 / 0 / 2
Регистрация: 01.07.2017
Сообщений: 2
#1

Неясный принцип работы кода - Python

01.07.2017, 05:44. Просмотров 180. Ответов 1
Метки нет (Все метки)

Здравия всем форумчанам =)
История следующая. В ходе изучения python (третьего) была поставлена задача - взять текстовый файл, в котором построчно записаны английские слова, и на выходе получить файл, в котором бы содержались все английские слова, за исключением содержащих нежелательную букву.
На выходе получился код следующего характера.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
imported = open('words.txt')
trigger='a'
l=[]
t=-1
for line in imported:   #Добавляем все строки из словаря в список l
    l.append(line)
 
n=0
for j in l: #Для каждой строки в списке l проверяется наличие символа-триггера Если триггер есть, элемент списка l удаляется
    t=j.find(trigger)
    if t!=-1:
        l.pop(n)
 
output=open("output.txt","w")   #Производим построчную запись в файл output.txt
for j in l: 
    output.write(j)
output.close()
Что касается счётчика n, изначально он был добавлен в части кода, отвечающей за удаление нежелательных слов в следующем виде:
Python
1
2
3
4
5
6
n=0
for j in l: #Для каждой строки в списке l проверяется наличие символа-триггера Если триггер есть, элемент списка l удаляется
    t=j.find(trigger)
    if t!=-1:
        l.pop(n)
    n+=1
Однако, тут я вспомнил, что если запись с индексом n будет удалена, то будет пропущена запись, которая за ней следует, т.к. она получит индекс n, а счётчик уже будет на единицу больше. Собственно, результат выполнения был не очень удовлетворительным,т.к. значительная часть слов с a сохранилась. Тогда история немного изменилась и результатом стало сие:
Python
1
2
3
4
5
6
7
n=0
for j in l: #Для каждой строки в списке l проверяется наличие символа-триггера Если триггер есть, элемент списка l удаляется
    t=j.find(trigger)
    if t!=-1:
        l.pop(n)
    else:
        n+=1
Однако, работа этого кода была также неудовлетворительной. Удалилось уже больше элементов, но всё ещё слов с буквой а было пруд пруди. После этого было высказано предположение, что метод l.pop сам что-то непонятное делает с индексом или есть какой-то шаман с бубном. В общем, получился код, приведённый в начале поста. И о чудо, код удалил ещё больше слов с нежелательной буквой. Однако, всё ещё значительное количество слов, содержащих a проскакивало в итоговом результате.

Из этого вопрос: почему это происходит и как необходимо сформулировать код, чтобы в итоге получить файл, который содержит все слова, кроме содержащих нежелательный символ.
Заранее выражаю благодарность неравнодушным
http://www.cyberforum.ru/python/thread1733534.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2017, 05:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неясный принцип работы кода (Python):

Popen принцип работы непонятен
Пишу вот так pc= Popen('start cmd /K' + zapros, shell=True) потом...

Не могу понять принцип работы python
Добрый день! Полгода учил PHP, сейчас нужен Python, разобрался с синтаксисом,...

Принцип работы кода
Прошу помочь мне с понятием данного кода, это игра сапер весь код в...

Принцип работы кода
Я только начал учить пхп и делаю это по Энди Харрису дак вот там есть...

Объяснить принцип работы кода
Помогите объяснить часть кода,что он делает } ...

1
oldnewyear
404 / 394 / 156
Регистрация: 21.05.2016
Сообщений: 1,278
01.07.2017, 06:47 #2
Python
1
2
3
4
5
trigger = 'a'
with open('words.txt', 'r') as imported, open('output.txt', 'w') as output:
    for word in imported:
        if not trigger in word:
            output.write(word)
Добавлено через 11 минут
Python
1
2
3
4
for j in l:
    t=j.find(trigger)
    if t!=-1:
        l.pop(n)
Здесь ошибка. Нельзя изменять список в процессе итерации по нему же
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2017, 06:47
Привет! Вот еще темы с решениями:

Объясните принцип работы кода
Доброго дня. Объясните пожалуйста принцип работы кода построчно. public...

Объснить принцип работы кода
Добрый день. В универе с ребятами делала проектную работу,но толком не...

Объясните принцип работы кода
uses crt; function Armstrong(n:longint):boolean; var t,m,p,s,i,j:integer; ...

не понимаю принцип работы кода
Привет ! Помогите понять суть работы кода пожалуйста. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru