谁能解释一下这些循环?

问题描述 投票:0回答:2

我需要帮助理解这段代码。我无法理解这些循环。谁能把它分解并解释一下?在这个程序中,"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;
python function loops url conditional-statements
2个回答
2
投票

你好想尽可能的回答:很简单的口语:While循环0检查行的结束While循环1检查标签的结束(或行)While循环2检查值的结束(或行)

更详细的。

i = 0

[WHILE LOOP 0]i=0是这一行的开始,while循环循环,直到 i 已达到行的长度,以检查该行是否还有内容。

while i < len(line):

if子句检查html标签是否打开。

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

[WHILE LOOP 1]如果是这样,它就会在i上加1,然后运行另一个while循环,直到标签关闭。(>) 或到达行的末端。

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

如果标签不在上面的字段列表中,它就会打破了 While-Loop 0

if tag not in fields:
    break;

这个+1是在while循环成功和标签结束时添加的,以进入行中的下一个字符。

i = i + 1

[WHILE LOOP 2]然后它转到下一个字符,并假设有一个 价值 来.while循环循环,直到它再次找到html标签开始。'<'或者该行在最后。

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

然后它打破了外层的 循环0.

break

快乐的反馈和我的答案的改进。干杯


1
投票

我可以解释一下这个问题。

 I = 0

这是在创建一个新的变量,叫做I,并将其设置为0。

while I < Len (line)

这意味着无论在这个循环中执行什么代码,都会一直执行下去,直到I大于有多少行。正如你所看到的,在循环中,它在i上加了1,这意味着直到循环结束会有几秒钟的时间。


1
投票

我在代码中添加了一些注释,希望能使它更容易理解.当为丢失或无效数据添加错误处理时,你应该寻找你可能需要一些不可用数据的地方。

如果 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.
© www.soinside.com 2019 - 2024. All rights reserved.