6个案例教你快速掌握Python基础知识

发表于:2021-8-24 09:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

#
Python
  最近系统学习了一遍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()函数

  版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号