Может кто-нибудь объяснить петли? - PullRequest
1 голос
/ 02 мая 2020

Мне нужна помощь в понимании этого кода. Я не могу разобраться в петлях. Может кто-нибудь, пожалуйста, разбить его и объяснить? Что означает «i = 0» в этой Программе. Я также должен добавить обработку ошибок для отсутствующих и недействительных данных. Я был бы очень признателен. Спасибо!

        i = 0
        while i < len(line):

            if line[i] == '<':
                i = i + 1
                while i < len(line) and line[i] != '>':
                    tag += line[i]
                    i = i + 1

                if tag not in fields:
                    break;

                i = i + 1;

            while i < len(line) and line[i] != '<':

                value += line[i]
                i = i + 1
            break;

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

Привет, пытаясь ответить как можно лучше: Очень просто: пока l oop 0 проверяет конец строки, в то время как l oop 1 проверяет конец тега (или строки), пока l oop 2 проверки конца значения (или строки)

Более подробно:

i = 0

[WHILE L OOP 0] i = 0 - начало строки, и пока l oop повторяется до тех пор, пока i не достигнет длины строки, чтобы проверить, все ли еще содержимое строки.

while i < len(line):

Предложение if проверяет, открывается ли тег html.

if line[i] == '<':
    i = i + 1

[WHILE L OOP 1] В этом случае он добавляет 1 к i и запускает другой, пока l oop до тех пор, пока тег не закроется (>) или не будет достигнут конец строки.

while i < len(line) and line[i] != '>':
    tag += line[i]
    i = i + 1

Если тег не является int в списке полей сверху, он разбивает While-L oop 0

if tag not in fields:
    break;

Это +1 добавляется, когда l oop был успешным и тег завершен, к go следующему символу в строке

i = i + 1

[WHILE L OOP 2] * 10 34 * Затем он переходит к следующему символу и предполагает, что наступает значение . В то время как l oop зацикливается, пока не найдет начало тега html. '<' Или строка в конце. </p> while i < len(line) and line[i] != '<': value += line[i] i = i + 1 Затем она разрывает внешнее , а l oop 0 .

break

Рад обратной связи и улучшения моего ответа. Приветствия

1 голос
/ 02 мая 2020

Я добавил несколько комментариев в коде, которые, надеюсь, облегчат понимание. При добавлении обработки ошибок для отсутствующих или недействительных данных вам следует искать места, где вам могут понадобиться некоторые данные, которые недоступны.

Что произойдет, если data = ur.urlopen(link) не вернет никаких данных? Может ли urlopen генерировать какие-либо исключения? Вы можете найти эту информацию в документации .

Как только вы узнаете о возможных исключениях, вы можете перехватить их, используя блок try/except. Например:

try:
    raise ValueError  # Exception happens here.
except ValueError:  # You catch it here.
   print("Cought a Value Error.")  # And handle it here.
    i = 0  # This seems to be a index for each character in a line. 0 is the first character in the line.
    while i < len(line):  # Loop until the index reaches the last character in the line.
        # If you find the < character at position i.
        if line[i] == '<':
            i = i + 1  
            while i < len(line) and line[i] != '>':  # Loop until you find the matching >.
                tag += line[i]  # Save all character in between < and >
                i = i + 1

            if tag not in fields:  # Didn't find what you where looking for so exit the while loop.
                break;

            i = i + 1;
        # You are still in the line but the current character is not <.
        while i < len(line) and line[i] != '<':
            # Save all characters until the line ends or you find a <.
            value += line[i]  
            i = i + 1
        break;  # Exit the while loop.
1 голос
/ 02 мая 2020

Я могу немного объяснить это.

 I = 0

Это создание новой переменной, называемой I, и установка ее в ноль.

while I < Len (line)

Все это означает, что любой код, выполняемый в этом l oop, будет продолжать выполняться, пока I не станет больше, чем количество строк. Как вы можете видеть, в l oop он добавляет 1 к i. Это означает, что пройдет несколько секунд, пока l oop не закончится.

...