TA的每日心情 | 擦汗 2 小时前 |
---|
签到天数: 1047 天 连续签到: 5 天 [LV.10]测试总司令
|
最近系统学习了一遍python基础知识,学着学着灵光一闪,想到有没有快速掌握知识的方法。一般正常的逻辑是边看基础知识边练习案例,是一个书由厚变薄的过程。 不过现在节奏这么快,尤其是互联网公司,排除周末在家看孩子的时间,几乎没有时间和精力再进行深度学习,所以这篇文章就诞生了。
本文通过案例入手直接结合python知识点,可以快速掌握python基础知识点。
案例名称
·计算圆形面积
·输入字符并倒序输出
·猜数字游戏
·按照诗句格式输出诗词
·统计文本中出现次数最多的10个单词(txt)
·web页面元素提取
计算圆形面积
知识点:print 结合format()函数实现输出格式。
固定的公式:
- print(<输出字符串模板>.format(<变量1>,<变量2>,<变量3>))
复制代码 实现代码:
- r = 25 # 圆的半径是25
- area = 3.1415 * r * r #圆的公式
- print(area)
- print('{:.2f}'.format(area) ) # 只输出两位小数
复制代码 新手易错点:
format前的字符串模板格式‘{:.2f}’ 经常会写错,其中一个{}对应一个format里面的参数。
输入字符并倒序输出
核心思想:找到最后一个元素并输出。
知识点:
·输入使用input函数
·计算长度使用len()函数
·输出函数结尾使用end=’‘,作用在输出的字符后方添加空字符串
- #输入文本
- s=input('请输入一段文本:')
- #计算输入内容的长度并赋值给i
- i=len(s)-1
- #倒序循环输出
- while i>=0:
- print(s[i],end='')
- i=i-1
复制代码 实现效果:
猜数字游戏
随机产生一个数字,并判断输入的数字和这个随机数直到猜测成功。
知识点:
1.使用random.randint()函数生成一个随机数字
2.while()循环,当未满足条件一直执行,满足条件break跳出循环
3.输入数字eval函数结合input,将字符串类型转换成整数
4.if 三分支条件判断,if elif else 格式
实现代码:
- import random
-
- #生成随机数
- a=random.randint(0,1000)
- #统计次数
- count=0
-
- while True:
- number=eval(input('请输入0到1000之间的一个数:'))
-
- count=count+1
- #判断比较两个数
- if number>a:
- print('输大了')
- elif number<a:
- print('输小了')
- else:
- print('猜对了')
- break
-
- print('猜了次数是:',count)
复制代码 效果图:
按照诗句格式输出诗词
原来格式:
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
输出效果:
设计思路:
·将所有标点符号替换为\n
·文本居中对齐显示
知识点:
1.替换函数line.replace(变量名,要替换的值)
2.居中对齐line.center(宽度)
3.函数调用,将文本变量txt传入替换函数linesplit中
- txt = '''
- 人生得意须尽欢,莫使金樽空对月。
- 天生我材必有用,千金散尽还复来。
- '''
- #定义一个函数,实现将标点符号替换为\n
- def linesplit(line):
- plist = [',', '!', '?', ',', '。', '!', '?']
- for p in plist:
- line=line.replace(p,'\n')
- return line.split('\n')
- linewidth = 30 # 预定的输出宽度
- #定义一个函数,实现居中对齐
- def lineprint(line):
- global linewidth
- print(line.center(linewidth))
-
- #调用函数
- newlines=linesplit(txt)
- for newline in newlines:
- lineprint(newline)
复制代码 统计文本中出现次数最多的10个单词
我们来看看实现效果:
步骤拆分:
首先,将文本内容统一为小写,使用lower()函数;
再次,将文本中特殊字符替换为空格,replace()函数;
按空格将文本进行切割,使用split()函数;
统计单词出现的次数;
按频率从大到小排序 sort()函数;
按照固定格式输出 ,使用format()函数。
按照上面的步骤实现代码。
首先,将文本内容统一为小写,使用lower()函数:
- def gettxt():
- #读取文件
- txt=open('hamlet.txt','r').read()
- txt=txt.lower()
复制代码 再次,将文本中特殊字符替换为空格,replace()函数:\
- for ch in ''!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':'
- txt=txt.replace('')
- return txt
复制代码 按空格将文本进行切割,使用split()函数:
- hmlttxt=gettxt()
- words=hmlttxt.split()
复制代码 统计单词出现的次数:
- counts=0
- for word in words:
- counts[word]=counts.get(word,0)+1 #对word出现的频率进行统计,当word不在words时,返回值是0,当word在words中时,返回+1,以此进行累计计数
复制代码 按频率从大到小排序 items()sort()排序函数:
- items=list(counts.items())
- items.sort(key=lambada x:x[1],reverse=True)
复制代码 上面的x可以是任意字母,reverse=True倒序排序,默认升序。
按照固定格式输出 ,使用format()函数:
- for i in range(10)
- word,count=item[i]
- print('{0:<10}{1:>5}'.format(word,count))
复制代码 完整代码:
- # 首先,将文本内容统一为小写,使用lower()函数
- def gettxt():
- txt=open('hamlet.txt','r').read()
- txt=txt.lower()
- # 将文本中特殊字符替换为空格,replace()函数
- for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
- txt=txt.replace(ch,'')
- return txt
- # 按空格将文本进行切割,使用split()函数
- hamlettxt=gettxt()
- words=hamlettxt.split()
- # 统计字数
- counts={}
- for word in words:
- counts[word]=counts.get(word,0)+1
-
- # 按频率从大到小排序 sort()函数
- items=list(counts.items())
- items.sort(key=lambda x:x[1],reverse=True)
- # 按照固定格式输出 ,使用format()函数
- for i in range(10):
- word, count=items[i]
- print("{0:<10},{1:>5}".format(word,count))
复制代码 web页面元素提取图片url路径信息
这个功能目的主要是替换函数 及 自顶向下的设计思想。
实现的效果:
对整个功能拆分为如下过程:
首先,提取页面所有元素;
其次,提取图片的url路径;
然后,将路径信息输出显示;
最后,将这些路径保存到文件中。
我们把上面几个步骤,每个步骤封装成一个函数,最后main()函数进行调用,其中提取图片的url路径为核心。
提取页面所有元素
涉及到知识点:文件打开、读取及关闭。
- def gethtmllines(htmlpath):
- #文件打开
- f=open(r,'htmlpath',encoding='utf-8')
- #文件读取
- ls=f.readlines()
- #文件关闭
- f.close()
- return ls
复制代码 提取图片的url路径
源码:
知识点:列表形式存放截取后的地址;列表的切割,split()函数。
- def geturl(ls):
- urls=[]
- for line in ls:
- if 'img' in line:
- url=line.split('src=')[-1].split('"')[1]
- urls.append(url)
复制代码 将路径信息输出显示
知识点:for循环将路径信息输出。
- for循环将路径信息输出
- def show(urls):
- count=0
- for url in urls:
- print('第{:2}个url{}'.format(count,url))
- count+=1
复制代码 将这些路径保存到文件中
知识点:文件的写入。
- def save(filepath,urls):
- f=open(filepate,'w')
- for url in urls:
- f.write(url+'\n')
- f.close()
复制代码 main()函数,将上面的函数进行组合
- def main():
- inputfile = 'nationalgeographic.html'
- outputfile = 'nationalgeographic-urls.txt'
- htmlLines = getHTMLlines(inputfile)
- imageUrls = extractImageUrls(htmlLines)
- showResults(imageUrls)
- saveResults(outputfile, imageUrls)
复制代码 最终代码:
- # Example_8_1.py
- #1. 按行读取页面所有内容
- def getHTMLlines(htmlpath):
- f = open(htmlpath, "r", encoding='utf-8')
- ls = f.readlines()
- f.close()
- return ls
- #2. 提取http路径
- def extractImageUrls(htmllist):
- urls = []
- for line in htmllist:
- if 'img' in line:
- url = line.split('src=')[-1].split('"')[1]
- print
- if 'http' in url:
- urls.append(url)
- return urls
- #3. 输出链接地址
- def showResults(urls):
- count = 0
- for url in urls:
- print('第{:2}个URL:{}'.format(count, url))
- count += 1
- #4. 保存结果到文件
- def saveResults(filepath, urls):
- f = open(filepath, "w")
- for url in urls:
- f.write(url+"\n")
- f.close()
-
- def main():
- inputfile = 'nationalgeographic.html'
- outputfile = 'nationalgeographic-urls.txt'
- htmlLines = getHTMLlines(inputfile)
- imageUrls = extractImageUrls(htmlLines)
- showResults(imageUrls)
- saveResults(outputfile, imageUrls)
- main()
复制代码 一句话总结:这个小案例可熟练掌握文件的读、写操作,可以体会函数的思想以及split()函数的拆分。
总结
上面主要介绍了python的基础功能,建议大家熟练掌握,主要知识点如下:
·input函数实现输入
·print结合format()函数对结果进行输出
·计算字符串长度len()函数
·使用random.randint()函数生成随机数字
·eval函数结合input,将字符串类型转换成整数
·if 三分支条件判断,if elif else 格式
·替换函数line.replace(变量名,要替换的值)
·文本内容统一为小写,使用lower()函数
·文本中特殊字符替换为空格,replace()函数
·文本进行切割,使用split()函数
·从大到小排序 sort()函数
|
|