笔记:udacity计算机导论 -5-29/30 查找、提取、并输出超链 if vs while
来源:互联网 发布:ecshop sql注入漏洞 编辑:程序博客网 时间:2024/05/21 11:32
本课里,要求用while语句查找并输出 href= 后超链。 刚开始用只用while语句,发现是死循环
def get_next_target(page):
start_link = 0
end_quote = 0
while start_link != -1:
start_link = page.find('<a href=',end_quote)
#Insert your code below here
start_quote = page.find('"', start_link)
end_quote = page.find('"', start_quote + 1)
url = page[start_quote + 1:end_quote]
print url, end_quote
print None, 0
get_next_target('<a href="www.co.com"> <a href="www.ah.com"> <a href="www.ut.com">.....<a href="">')
原因是,当循环到查找到最后一个a href= 后, 因为值为正,循环会再执行一次,但此时end_quote的值为-1, 于是相当于又重头开始查找、输出超链。
因此,必须在while下再加入if语句,控制跳出
def get_next_target(page):
start_link = 0
end_quote = 0
if start_link == -1:
print None, 0
else:
while start_link != -1:
start_link = page.find('<a href=',end_quote)
#Insert your code below here
start_quote = page.find('"', start_link)
end_quote = page.find('"', start_quote + 1)
url = page[start_quote + 1:end_quote]
if start_link == -1 or start_quote == -1 or end_quote == -1 or url == "":
break
else:
print url, end_quote
get_next_target('<a href="www.co.com"> <a href="www.ah.com"> <a href="www.ut.com">.....<a href=" ">')
上面if + or控制条件,确保程序在查找到到最后一个a href=语句后,不会再继续循环下去。
但这样的代码还是有问题,如果传入的参数以<a href= 结尾,代码在查找到最后一个<a href= 时,其实是找不到超链了,但依旧会返回一个空值。
在python里,上面代码的运行结果为:
www.co.com19
www.ah.com41
www.ut.com63
80
注意上面的第2个if语句后,有一个url == "",愿意是希望当a href=后跟空字符串时,控制不输出。当传入的字符以a href=""结尾时,结果如预期。但是如果传入字符a href="",多个空格的字符串时,运行结果始终以一个空字符,再一个位置数值的输出结果结束。
如果代码改成这样:
def get_next_target(page):
start_link = page.find('<a href=')
#Insert your code below here
start_quote = page.find('"', start_link)
end_quote = page.find('"', start_quote + 1)
url = page[start_quote + 1:end_quote]
return url, end_quote
def printUrl(py):
while True: #True必须首字母大写
url,end_bd = get_next_target(py)
py = py[end_bd:]
if url:
print url
else:
break
printUrl('<a href="www.co.com"> <a href="www.ah.com"> <a href="www.ut.com">.....<a ')
输出结果是一样的。 不过后一种写法模块化更明显。维护起来可能更方便。
另外,这个题除了很好的提现了if, break 这个看似多余的语句的价值, 还清楚的区别了if 和 while 语句:
if是条件语句,无论真假,只执行一遍
while是循环语句,如果循环后的控制语句判断为真,则持续循环,若为假,则跳出循环。
所以while语句需要担心死循环,而if不需要。
- 笔记:udacity计算机导论 -5-29/30 查找、提取、并输出超链 if vs while
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 笔记:udacity计算机导论
- 难点笔记:udacity计算机导论- 37使用数字查找
- 难点笔记:udacity计算机导论
- 难点笔记:udacity计算机导论
- 难点笔记:udacity计算机导论
- 笔记:udacity计算机科学导论- 课程11/27-29 for + in/not in 求并集
- Udacity笔记
- Udacity作业——TensorFlow notMNIST代码及输出结果——Udacity学习笔记
- 提取单词并逆序输出
- 计算机导论第三课笔记
- Python笔记(四) if,while,for
- 异步请求与同步请求之间的转换
- 2017-11-06-linux-解决vi中backspace无法删除字符
- Applet 类
- 发现小服务器被入侵了 cpu长期100%
- Ubuntu环境下配置ThinkPHP开发环境
- 笔记:udacity计算机导论 -5-29/30 查找、提取、并输出超链 if vs while
- java日常学习:泛型
- 个人知乎 ##基础九——爬虫入门PySpider
- 我的Raspberry Pi/树莓派有线网和无线网接通了------不需要树莓派显示器,键盘,鼠标,串口
- Ionic3学习笔记(十)实现夜间模式功能
- bzoj 4260: Codechef REBXOR(01字典树)
- 怎么在S12X上使用XGATE协处理器
- Excel在统计分析中的应用—第八章—假设检验-总体方差未知且为小样本下的均值之差检验
- FOJ2214 Knapsack problem(逆01背包)