有人可以解释这些循环吗?

问题描述 投票:1回答:3

我需要帮助来理解此代码。我无法理解循环。有人可以分解并解释吗? “ 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
3个回答
2
投票

[您好,我尽可能回答:说的很简单:While循环0检查行尾While循环1检查标记(或行)的结尾While循环2检查值(或行)的结尾]

更详细:下面的数据设置了链接和代码将在html TAG中检查的TAG。它还创建列表,将在列表中添加结果(以后称为v​​alue

def process_file(link):
    data = ur.urlopen(link)
    fields = ["TITLE", "ARTIST", "COUNTRY", "COMPANY", "PRICE", "YEAR"]
    title = []
    artist = []
    country = []
    company = []
    price = []
    year = []

[FOR LOOP]这里的代码遍历每一行,定义了unicode并删除了空格。

for line in data:
    line = line.decode('utf-8')
    line = line.lstrip()
    line = line.rstrip()

在这里,在检查行之前将标记和值复位。计数器i也会重置为从行的开头开始。

tag = ""
value = ""
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

如果标签不是int字段列表,则它会中断While-Loop 0

if tag not in fields:
    break;

当while循环成功并且标记结束时,将添加此+1,以转到该行中的下一个字符

i = i + 1

[WHILE LOOP 2]然后转到下一个字符,并假定有一个value出现。while循环一直循环,直到再次找到html标签开始为止。 '

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

然后破坏外部while循环0

break

现在,它检查tag是哪个字段,并添加在[[For Loop的运行中找到的value,并运行For Loop]的下一行>if tag == "TITLE": title.append(value) elif tag == "ARTIST": artist.append(value) elif tag == "COUNTRY": country.append(value) elif tag == "COMPANY": company.append(value) elif tag == "PRICE": price.append(float(value)) elif tag == "YEAR": year.append(int(value))

最后,它返回开头定义的列表。

return title,artist,country,company,price,year

对反馈和我的回答得到改善感到高兴。干杯

1
投票
我可以解释一下。

1
投票
我已在代码中添加了一些注释,希望可以使其更易于理解。在添加针对丢失或无效数据的错误处理时,应查找可能需要一些不可用数据的地方。
© www.soinside.com 2019 - 2024. All rights reserved.