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的乘法结果

总结

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

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
328 1
|
2月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
268 0
|
2月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
426 0
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
173 0
|
2月前
|
SQL 安全 Linux
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
147 1
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
|
2月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
194 1
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
|
2月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
338 2
|
11月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1012 23
|
8月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1206 24

推荐镜像

更多