• 14
  • 14
分享
  • 6个案例教你快速掌握Python基础知识——软件测试圈
  • 曼倩诙谐 2021-09-09 10:07:57 字数 5662 阅读 2393 收藏 14

  最近系统学习了一遍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

  实现效果:

2-1.png

  猜数字游戏

  随机产生一个数字,并判断输入的数字和这个随机数直到猜测成功。

   知识点:

   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)

  效果图:

2-2.png

  按照诗句格式输出诗词

  原来格式:

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

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

   输出效果:

2-3.png

  设计思路:

   ·将所有标点符号替换为\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个单词

  我们来看看实现效果:

2-4.png

  步骤拆分:

   首先,将文本内容统一为小写,使用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路径信息

  这个功能目的主要是替换函数 及 自顶向下的设计思想。

   实现的效果:

2-5.png

  对整个功能拆分为如下过程:

   首先,提取页面所有元素;

   其次,提取图片的url路径;

   然后,将路径信息输出显示; 

  最后,将这些路径保存到文件中。

   我们把上面几个步骤,每个步骤封装成一个函数,最后main()函数进行调用,其中提取图片的url路径为核心。

  提取页面所有元素

  涉及到知识点:文件打开、读取及关闭。

 def gethtmllines(htmlpath):
  #文件打开
  f=open(r,'htmlpath',encoding='utf-8')
  #文件读取
  ls=f.readlines()
  #文件关闭
  f.close()
  return ls

  提取图片的url路径

  源码:

2-6.png

  知识点:列表形式存放截取后的地址;列表的切割,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软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言 文章内容为本人这三年来在嵌入式软件测试(黑盒)上的一些积累吧,说起来也挺快的,毕业三年的时间就这样过去了,在两家公司工作过(现在这家是第二家),这几年的测试项目基本都是围绕着嵌入式软件,同时需要兼顾测试APP端,WEB端功能,web后端接口(postman),只是测试业务重心还是在嵌入式软件上。为什么测试的这么杂呢,其实这些全部加起来只是一个产品,只是因为目前就只有我一个测试,所以整套系统都是由我一个人来测,就拿我现在这家公司做的一个视频会议系统来说吧,整套系统包含有硬终端(linux端),app端,web端(用于后台账户/会议管理等),PC端组成。接触过嵌入式软件测试的同学应...
            11 11 1538
            分享
          • 常见状态码一、2xx 成功200 OK 请求成功,且返回了内容204 No Content 请求成功处理,但不返回内容二、3xx 重定向301 Moved Permanently 请求永久重定向302 Moved Temporarily 请求临时重定向304 Not Modified 文件未修改,可以直接使用缓存的文件三、4xx 请求错误400 Bad Request 客户端请求有语法错误,不能被服务器所理解401 Unauthorized 请求未经授权,认证未通过403 Forbidden 服务器收到请求,但是拒绝服务,通常会在响应正文中给出不提供服务的原因。通常跟权限有关404 Not F...
            0 0 684
            分享
          •   构造数据方法  构造少量数据  对于上面例子(2)是我们经常碰到的情况。如果只需要构造一个人的信息,即可满足测试,我们可以使用SQL 语句在数据库里面 insert 插入一条数据,或者 update 一条历史数据使其满足查询条件即可  下面演示一下,先在数据库里面创建person数据表,创建SQL语句如下:  create table `person` (     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMME...
            0 0 494
            分享
          • 1、按严重程度分类:是指bug对软件质量的破坏程度,即此bug的存在将对软件的功能和性能产生什么样的影响。崩溃(Blocker):系统无法正常运行。阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环、导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。严重(Critical):很明显的错误性的bug。系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符模块无法启动或调用,程序重...
            14 13 3740
            分享
          • 测试用例测试用例的特性1、有效性:测试用例的能够被使用,且被不同人员使用测试结果一致2、可重复性:良好的测试用例具有重复使用的功能。(回归测试)3、易组织性:好的测试用例会分门别类地提供给测试人员参考和使用(功能、性能、易用分类编号)4、清晰、简洁:好的测试用例描述清晰,每一步都应有相应的作用,有很强的的针对性,不应出现一些无用的操作步骤。5、可维护性:由于软件开发过程中需求变更等原因的影响,常常对测试用例进行修改、增加、删除等,以便测试用符合相应测试要求。1:测试用例包含什么类容用例编号,所属模块,用例描述,前置条件,优先级,输入数据,操作步骤,预期结果,实际结果,测试人员,测试时间2:测试...
            0 0 3640
            分享
      • 51testing软件测试圈微信