Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)

简介: 本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。

前言

前面的python基础部分都学习完了,那么剩下的只有练习了,对于很多精通python的人而言,没有捷径可言、唯手熟尔。一旦缺少持久的练习,就会对很多知识点选择性遗忘,尽管能从百度找到答案,但作者建议:不要每次都去百度,要学会自己解决问题。练习篇会从一些经典的练习题或面试题进行讲解。

练习

天下武功,唯快不破。为什么?因为快,敌人无法及时作出回应,便已经输了。那么开发一途,唯有勤加苦练。但是也需要一点点技巧,不能盲目。

计算器

卖橘子的计算器:写一段代码,提示用户输入橘子的价格,然后随机生成购买的斤数(5到10斤之间),最后计算出应该支付的金额!

分析

这里面涉及多个基础知识的应用,如输入input、随机数的产生random、计算涉及的运算、扩展的话应该还有异常及条件判断

  • input函数的处理,接收数据后的类型只能是字符串,那么在算术运算时需要的是int或者float类型
import random

try:
    price = float(input("请输入橘子的价格:"))
except:
    print("输入数据错误")
    raise

weight = random.randint(5,10)

money = round(price * weight,2)

print("用户购买{}斤橘子,应付{}元。".format(weight,money))
  • 思考点1:对于输入的价格,为什么是float而不是int?
  • 思考点2:最后计算的金额,为什么要使用round()函数?或者有什么其他用法代替?
猜数字

程序会随机生成一个1-9之间数值,提示用户猜数字,猜错继续猜(需要给出提示大小,让用户继续输入),猜对了则退出程序。加个条件,用户只有3次机会,不能无限次输入,因为总会猜对。

分析

提取题目描述的关键信息:随机数random、循环while、break关键字、有限制次数

  • break关键字的用法,在循环体中,执行到break程序会中断退出,不会再执行后面的代码
import random

guess = random.randint(1,9)

i = 0

while i < 3:
    guest=int(input("请用户输入1-9范围的整数,不能是小数(仅有3次机会):"))

    if guest > guess:
        print("用户输入数值大了,请重新输入:")
    elif guest < guess:
        print("用户输出数值小了,请重新输入:")
    else:
        print("恭喜用户猜对了。")
        break
    i += 1
猜拳

这个游戏和猜数字差不多,但是多了一点点运算,且看要求如何:提示用户输入要出的拳:石头(1)/剪刀(2)/布(3)/退出(4) 电脑随机出拳比较胜负,显示 用户胜、负还是平局;注意:用户有权选择退出游戏,且每次猜拳电脑也要随机,而不像上次猜数字那样电脑只在当前运行中随机产生一次;所以不限次数。

分析

所以电脑出拳要在循环体类,保证用户每次出拳,电脑也随机出拳;根据要求,肯定是需要一个变量来储存石头剪刀布。

  • 分析数据特点,有数字和中文,那么何种方式来储存数据呢?两个方案:一是字典,二是随机函数;下面会给两个方案都演示一个案例:
方案一:字典储存猜拳数据
import random


guess_dic = {
   1:"石头",2:"剪刀",3:"布"}

while True:
    guest = int(input("请用户输入1-4的整数,分表代表:石头(1)/剪刀(2)/布(3)/退出(4),开始猜拳:"))

    com_guess  = random.randint(1,3)

    if guest == 4:
        print("选择出游戏或输入数字不在范围内退出游戏!!!")
        break
    elif (guest==1 and com_guess==3) or (guest==2 and com_guess==1) or (guest==3 and com_guess==2):
        print("用户出拳:{},电脑也出拳:{},电脑赢了!".format(guess_dic.get(guest),guess_dic.get(com_guess)))
    elif guest == com_guess:
        print("用户出拳:{},电脑也出拳:{},平局!".format(guess_dic.get(guest),guess_dic.get(com_guess)))
    else:
        print("用户出拳:{},电脑也出拳:{},用户赢了!".format(guess_dic.get(guest),guess_dic.get(com_guess)))
  • 小技巧:列举电脑赢的所有组合及平局的情况,那么剩下的就是用户赢,同时作者一边写也在一边测试,
方案二:列表储存,随机选择
import random


guess_lis = ["石头","剪刀","布"]

while True:
    guest = int(input("请用户输入1-4的整数,分表代表:石头(1)/剪刀(2)/布(3)/退出(4),开始猜拳:"))

    com_guess  = guess_lis.index(random.choice(guess_lis)) + 1

    if guest == 4:
        print("选择出游戏或输入数字不在范围内退出游戏!!!")
        break
    elif (guest==1 and com_guess==3) or (guest==2 and com_guess==1) or (guest==3 and com_guess==2):
        print("用户出拳:{},电脑也出拳:{},电脑赢了!".format(guess_lis[guest-1],guess_lis[com_guess-1]))
    elif guest == com_guess:
        print("用户出拳:{},电脑也出拳:{},平局!".format(guess_lis[guest-1],guess_lis[com_guess-1]))
    else:
        print("用户出拳:{},电脑也出拳:{},用户赢了!".format(guess_lis[guest-1],guess_lis[com_guess-1]))
  • 缺点:复杂度高了很多,电脑的随机出拳,是先随机选择列表,再得到索引,最后还得加1才能跟用户比较,否则用户赢面很大。
九九乘法表

作为经典的面试题,练习必不可少。提示:熟练掌握嵌套循环

嵌套for循环
for i in range(1,10):
    for j in range(1,i+1):
        print("{} * {} = {}".format(i,j,i*j),end=" ")
    print(" ")
嵌套while循环
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print("{} * {} = {}".format(i, j, i * j), end=" ")
        j += 1
    i += 1
    print("")
  • 点评:相较而言for循环实现会比较简单且不易出错,while关于变量的运算位置,可能会导致出错,例如j在最外层初始化,可能的情况是只得到1-9的乘法结果

总结

这篇练习比较综合,复习了数据类型、运算、循环、条件控制等基础语法;下一篇还会从这些方面来复习,唯有通过更多的练习来巩固所学的知识,作者也权当复习了。

相关文章
|
7天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
32 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
3天前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性?
如何确保自动化安全测试的全面性和准确性?
|
2天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
12 2
|
4天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
12 3
|
3天前
|
数据采集 IDE 测试技术
Python实现自动化办公:从基础到实践###
【10月更文挑战第21天】 本文将探讨如何利用Python编程语言实现自动化办公,从基础概念到实际操作,涵盖常用库、脚本编写技巧及实战案例。通过本文,读者将掌握使用Python提升工作效率的方法,减少重复性劳动,提高工作质量。 ###
11 1
|
5天前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
19 0
|
4天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
27 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
56 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
230 7
Jmeter实现WebSocket协议的接口测试方法