Форум программистов, компьютерный форум, киберфорум
Наши страницы

Python

Войти
Регистрация
Восстановить пароль
 
argulator
0 / 0 / 0
Регистрация: 01.07.2017
Сообщений: 2
#1

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

01.07.2017, 05:44. Просмотров 156. Ответов 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 проскакивало в итоговом результате.

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

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

Объясните принцип работы функции - Python
Доброе время суток! Есть функция написанная на питоне, нужно этот функционал реализовать на C#. Возникли трудности понимания синтаксиса...

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

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

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

Объяснить принцип работы кода - C#
Помогите объяснить часть кода,что он делает } this.Frame.Navigate(typeof(BasicPage2)); ...

1
oldnewyear
375 / 363 / 107
Регистрация: 21.05.2016
Сообщений: 1,196
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
Привет! Вот еще темы с ответами:

Объснить принцип работы кода - C#
Добрый день. В универе с ребятами делала проектную работу,но толком не разобралась в коде программы. Кто может объяснить внятно, что где...

не понимаю принцип работы кода - C++
Привет ! Помогите понять суть работы кода пожалуйста. for(i=1;i<=10;sum+=i++); Как работает sum+=i++ НЕ ПОНИМАЮ ...

Объяснить принцип работы декомпилированного кода - C#
Здравствуйте! Есть код который я получил с помощью ILSpy : private unsafe void DecodeStr(sbyte* si, sbyte* so, int Len, byte...

Цикл while, объясните принцип работы кода - C#
Добрый день. Никак не могу понять как работает цикл while, чисто из принципа хочу разобраться. Это в книги Шилдта такой пример. using...


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

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

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