51Testing软件测试论坛

标题: 6个案例教你快速掌握Python基础知识 [打印本页]

作者: lsekfe    时间: 2021-8-24 11:27
标题: 6个案例教你快速掌握Python基础知识
最近系统学习了一遍python基础知识,学着学着灵光一闪,想到有没有快速掌握知识的方法。一般正常的逻辑是边看基础知识边练习案例,是一个书由厚变薄的过程。   不过现在节奏这么快,尤其是互联网公司,排除周末在家看孩子的时间,几乎没有时间和精力再进行深度学习,所以这篇文章就诞生了。
  本文通过案例入手直接结合python知识点,可以快速掌握python基础知识点。
  案例名称
  ·计算圆形面积
  ·输入字符并倒序输出
  ·猜数字游戏
  ·按照诗句格式输出诗词
  ·统计文本中出现次数最多的10个单词(txt)
  ·web页面元素提取

  计算圆形面积
  知识点:print 结合format()函数实现输出格式。
  固定的公式:
  1. print(<输出字符串模板>.format(<变量1>,<变量2>,<变量3>))
复制代码
实现代码:
  1.   r = 25    # 圆的半径是25

  2.   area = 3.1415 * r * r  #圆的公式

  3.   print(area)

  4. print('{:.2f}'.format(area) )  # 只输出两位小数
复制代码
新手易错点:
  format前的字符串模板格式‘{:.2f}’ 经常会写错,其中一个{}对应一个format里面的参数。

  输入字符并倒序输出
  核心思想:找到最后一个元素并输出。
  知识点:
  ·输入使用input函数
  ·计算长度使用len()函数
  ·输出函数结尾使用end=’‘,作用在输出的字符后方添加空字符串
  1. #输入文本

  2.   s=input('请输入一段文本:')

  3.   #计算输入内容的长度并赋值给i

  4.   i=len(s)-1

  5.   #倒序循环输出

  6.   while i>=0:

  7.       print(s[i],end='')

  8.       i=i-1
复制代码
实现效果:
[attach]134013[/attach]
猜数字游戏
  随机产生一个数字,并判断输入的数字和这个随机数直到猜测成功。
  知识点:
  1.使用random.randint()函数生成一个随机数字
  2.while()循环,当未满足条件一直执行,满足条件break跳出循环
  3.输入数字eval函数结合input,将字符串类型转换成整数
  4.if 三分支条件判断,if elif else 格式
  实现代码:

  1. import random

  2.   

  3.   #生成随机数

  4.   a=random.randint(0,1000)

  5.   #统计次数

  6.   count=0

  7.   

  8.   while True:   

  9.       number=eval(input('请输入0到1000之间的一个数:'))   

  10.   

  11.   count=count+1

  12.   #判断比较两个数

  13.   if number>a:

  14.       print('输大了')

  15.   elif number<a:

  16.       print('输小了')

  17.   else:

  18.       print('猜对了')

  19.       break

  20.   

  21.   print('猜了次数是:',count)
复制代码
效果图:
[attach]134014[/attach]
按照诗句格式输出诗词
  原来格式:
  人生得意须尽欢,莫使金樽空对月。
  天生我材必有用,千金散尽还复来。
  输出效果:

[attach]134015[/attach]
设计思路:
  ·将所有标点符号替换为\n
  ·文本居中对齐显示
  知识点:
  1.替换函数line.replace(变量名,要替换的值)
  2.居中对齐line.center(宽度)
  3.函数调用,将文本变量txt传入替换函数linesplit中

  1. txt = '''

  2. 人生得意须尽欢,莫使金樽空对月。

  3. 天生我材必有用,千金散尽还复来。

  4. '''

  5. #定义一个函数,实现将标点符号替换为\n







  6. def linesplit(line):

  7.     plist = [',', '!', '?', ',', '。', '!', '?']

  8.     for p in plist:

  9.         line=line.replace(p,'\n')




  10.     return line.split('\n')

  11. linewidth = 30  # 预定的输出宽度







  12. #定义一个函数,实现居中对齐

  13. def lineprint(line):

  14.     global linewidth

  15.     print(line.center(linewidth))

  16.    

  17. #调用函数




  18. newlines=linesplit(txt)

  19. for newline in newlines:

  20.     lineprint(newline)
复制代码
统计文本中出现次数最多的10个单词
  我们来看看实现效果:

[attach]134016[/attach]
 步骤拆分:
  首先,将文本内容统一为小写,使用lower()函数;
  再次,将文本中特殊字符替换为空格,replace()函数;
  按空格将文本进行切割,使用split()函数;
  统计单词出现的次数;
  按频率从大到小排序 sort()函数;
  按照固定格式输出 ,使用format()函数。
  按照上面的步骤实现代码。
  首先,将文本内容统一为小写,使用lower()函数:

  1. def gettxt():

  2.   #读取文件

  3.   txt=open('hamlet.txt','r').read()

  4.   txt=txt.lower()
复制代码
再次,将文本中特殊字符替换为空格,replace()函数:\
  1.   for ch in ''!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':'

  2.     txt=txt.replace('')

  3.   return txt
复制代码
按空格将文本进行切割,使用split()函数:
  1. hmlttxt=gettxt()

  2. words=hmlttxt.split()
复制代码
统计单词出现的次数:
  1. counts=0

  2. for word in words:

  3.   counts[word]=counts.get(word,0)+1   #对word出现的频率进行统计,当word不在words时,返回值是0,当word在words中时,返回+1,以此进行累计计数
复制代码
按频率从大到小排序 items()sort()排序函数:
  1. items=list(counts.items())

  2. items.sort(key=lambada x:x[1],reverse=True)
复制代码
上面的x可以是任意字母,reverse=True倒序排序,默认升序。
  按照固定格式输出 ,使用format()函数:

  1. for i in range(10)

  2.   word,count=item[i]

  3.   print('{0:<10}{1:>5}'.format(word,count))
复制代码
完整代码:
  1. # 首先,将文本内容统一为小写,使用lower()函数

  2. def gettxt():

  3.     txt=open('hamlet.txt','r').read()

  4.     txt=txt.lower()

  5. # 将文本中特殊字符替换为空格,replace()函数

  6.     for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':

  7.         txt=txt.replace(ch,'')

  8.     return txt

  9. # 按空格将文本进行切割,使用split()函数

  10. hamlettxt=gettxt()

  11. words=hamlettxt.split()

  12. # 统计字数




  13. counts={}

  14. for word in words:

  15.     counts[word]=counts.get(word,0)+1

  16.    

  17. # 按频率从大到小排序  sort()函数

  18. items=list(counts.items())

  19. items.sort(key=lambda x:x[1],reverse=True)

  20. # 按照固定格式输出 ,使用format()函数




  21. for i in range(10):

  22.     word, count=items[i]

  23.     print("{0:<10},{1:>5}".format(word,count))
复制代码
web页面元素提取图片url路径信息
  这个功能目的主要是替换函数 及 自顶向下的设计思想。
  实现的效果:

[attach]134017[/attach]
对整个功能拆分为如下过程:
  首先,提取页面所有元素;
  其次,提取图片的url路径;
  然后,将路径信息输出显示;
  最后,将这些路径保存到文件中。
  我们把上面几个步骤,每个步骤封装成一个函数,最后main()函数进行调用,其中提取图片的url路径为核心。

  提取页面所有元素
  涉及到知识点:文件打开、读取及关闭。

  1. def gethtmllines(htmlpath):

  2.   #文件打开

  3.   f=open(r,'htmlpath',encoding='utf-8')

  4.   #文件读取

  5.   ls=f.readlines()

  6.   #文件关闭

  7.   f.close()

  8.   return ls
复制代码
提取图片的url路径
  源码:

[attach]134018[/attach]
 知识点:列表形式存放截取后的地址;列表的切割,split()函数。
  1. def geturl(ls):

  2.   urls=[]

  3.   for line in ls:

  4.     if 'img' in line:

  5.       url=line.split('src=')[-1].split('"')[1]

  6.       urls.append(url)
复制代码
 将路径信息输出显示
  知识点:for循环将路径信息输出。

  1. for循环将路径信息输出

  2. def show(urls):

  3.   count=0

  4.   for url in urls:

  5.     print('第{:2}个url{}'.format(count,url))

  6.     count+=1   
复制代码
将这些路径保存到文件中
  知识点:文件的写入。

  1. def save(filepath,urls):

  2.   f=open(filepate,'w')

  3.   for url in urls:

  4.     f.write(url+'\n')

  5.   f.close()
复制代码
main()函数,将上面的函数进行组合
  1. def main():

  2.     inputfile  = 'nationalgeographic.html'

  3.     outputfile = 'nationalgeographic-urls.txt'

  4.     htmlLines = getHTMLlines(inputfile)

  5.     imageUrls = extractImageUrls(htmlLines)

  6.     showResults(imageUrls)

  7.     saveResults(outputfile, imageUrls)
复制代码
 最终代码:
  1. # Example_8_1.py

  2. #1. 按行读取页面所有内容

  3. def getHTMLlines(htmlpath):

  4.     f = open(htmlpath, "r", encoding='utf-8')

  5.     ls = f.readlines()

  6.     f.close()

  7.     return ls




  8. #2. 提取http路径

  9. def extractImageUrls(htmllist):

  10.     urls = []

  11.     for line in htmllist:

  12.         if 'img' in line:

  13.             url = line.split('src=')[-1].split('"')[1]

  14.             print

  15.             if 'http' in url:

  16.                 urls.append(url)

  17.     return urls

  18. #3. 输出链接地址   

  19. def showResults(urls):

  20.     count = 0

  21.     for url in urls:

  22.         print('第{:2}个URL:{}'.format(count, url))

  23.         count += 1

  24. #4. 保存结果到文件

  25. def saveResults(filepath, urls):

  26.     f = open(filepath, "w")

  27.     for url in urls:

  28.         f.write(url+"\n")

  29.     f.close()

  30.    

  31. def main():

  32.     inputfile  = 'nationalgeographic.html'

  33.     outputfile = 'nationalgeographic-urls.txt'

  34.     htmlLines = getHTMLlines(inputfile)

  35.     imageUrls = extractImageUrls(htmlLines)

  36.     showResults(imageUrls)

  37.     saveResults(outputfile, imageUrls)




  38. main()
复制代码
一句话总结:这个小案例可熟练掌握文件的读、写操作,可以体会函数的思想以及split()函数的拆分。

  总结
  上面主要介绍了python的基础功能,建议大家熟练掌握,主要知识点如下:
  ·input函数实现输入
  ·print结合format()函数对结果进行输出
  ·计算字符串长度len()函数
  ·使用random.randint()函数生成随机数字
  ·eval函数结合input,将字符串类型转换成整数
  ·if 三分支条件判断,if elif else 格式
  ·替换函数line.replace(变量名,要替换的值)
  ·文本内容统一为小写,使用lower()函数
  ·文本中特殊字符替换为空格,replace()函数
  ·文本进行切割,使用split()函数
  ·从大到小排序 sort()函数




作者: 海海豚    时间: 2021-8-26 16:56
感谢分享!学习了!
作者: 千里    时间: 2021-8-27 09:15
这些案例确实不错,但需要一点一点的做出来




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2