51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 667|回复: 0
打印 上一主题 下一主题

一名老测试总结的Python中的常见语句分享

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-7 16:53:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 草帽路飞UU 于 2022-9-7 16:56 编辑

4.1  if条件判断语句

4.1.1  if条件判断语句单分支

◆单分支格式:if 判断条件:

语句块1……

else:

语句块2……

Ø例:name=input('请输入您的用户名:')

if name == 'admin':

               print('欢迎管理员用户')

           else:

               print('欢迎普通用户')#输出:请输入您的用户名:

Ø例:num=10

if num>5:

    print('请选择物品进行兑换')

else:

    print('积分不足')#输出:请选择物品进行兑换

4.1.2  if条件判断语句多分支

◆多分支格式:if 判断条件1:

语句块1……

elif 判断条件2:

语句块2……

elif 判断条件3:

语句块3……

else:

语句块n

Ø例:name=input('请输入您的用户名:')

if name == 'admin':

                      print('欢迎管理员用户')

               elif name == 'kitty':

                     print('欢迎kitty用户')

               else:

                     print('用户不存在,请注册')

4.1.3  if条件判断语句的三目运算

◆三目运算基本格式:

name = input('请输入您的用户名:')

print ('在上海' if name == 'xiaowang' else '在深圳')

只适用于if条件判断语句的单分支

Ø例:name = input('请输入您的用户名:')

print('香港') if name == '深圳' else print('广东')#输出请输入您的用户名:

Ø例:dict={'name':'老六','age':18}

if dict.__contains__('class') is True:

    print(dict)

else:

    dict['class']=1844

    print(dict)#输出{'name': '老六', 'age': 18, 'class': 1844}

换位三目运算:

→dict={'name':'老六','age':18}

print(dict) if dict.__contains__('class') is True else dict.setdefault('class',1844) and print(dict)

#输出{'name': '老六', 'age': 18, 'class': 1844}

→dict={'name':'老六','age':18,'class':1999}

print(dict) if dict.__contains__('class') is True else dict.setdefault('class',1844) and print(dict)

#输出{'name': '老六', 'age': 18, 'class': 1999}

Ø例:登录功能实战练习

→通过输入函数/输入用户名/先判断用户名是否正确,用户名正确则进行密码判断

   # 如果用户名错误则提示:"用户名错误,请重新输入"

密码错误则提示"密码错误,请重新输入密码"

输入正确密码则登录成功

法1:username = input('请输入你的用户名:')

if username == 'admin':

    password = input('123456')

    if password == '123456':

        print('登录成功')

    else:

        print('您输入的密码有误,请重新输入')

else:

    print('您输入的用户名有误,请重新输入')

法2:dict={'username':'admin','password':'123456'}

username=input('请输入你的用户名:')

if username==dict.get('username'):

    password=input('请输入你的密码:')

    if password==dict.get('password'):

        print('登录成功')

    else:

        print('您输入的密码有误,请重新输入')

else:

    print('您输入的密码有误,请重新输入')

4.1.4  if语句之if的嵌套语句(if中包含if)

if 判断条件1:

语句块1

if 判断条件2:

语句块2

else:

语句块3

else:

语句块4

4.2  while循环语句

◆while语句的格式:

while 条件表达式:

循环体语句

◆while什么时候进入循环?当循环条件成立时,进入循环

◆while什么时候退出循环?当循环条件不成立时,退出循环

◆注意:在写while循环语句时一定要让循环条件发生变化,否认很容易陷入死循环中

Ø例:使用循环语句求出1—100的和

i=1

j=0

while i<101:

      j=i+j

      i+=1

print(j)#输出5050

Ø例:使用循环语句求出1—100之内的奇数之和

i=1

j=0

while i<=100:

       j+=i

       i+=2

print(j)#输出2500

Ø例:使用循环语句求出1—100之内的奇数之和减去偶数之和的结果

★              i=0

odd=0

even=0

while i<=100:

    if i%2==0:

        even+=i

    else:

        odd+=i

    i+=1

print(odd-even)#输出-50

4.3  for循环语句

◆for循环的语法格式如下:

for ... in ...

语句块

◆遍历(Traversal):是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一

样的。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

◆for循环遍历

字符串、列表、字典、元组、集合均可遍历,但不可遍历整型。

1>遍历字符串

str='python'

for i in str:

     print(i,end='')#输出python

2>遍历列表

list=[1,2,3,4,'a','b']

for i in list:

     print(i,end='')#输出1234ab

3>遍历元组

tuple=(1,2,3,4,['a','b'])

for i in tuple:

     print(i,end='')#输出1234['a', 'b']

4>遍历字典

dict={'name':'张三','age':18}

for i,j in dict.items():

     print(i,j)#输出name 张三  age 18

5>遍历集合

test='python'

set=set(test)

for i in set:

     print(i,end='')#输出npotyh

6>遍历整型(整型不能遍历)

test=123

for i in test:

        print(i)#TypeError: 'int' object is not iterable

Ø例:使用for循环打印出字符串hellokitty每个字符以及字符的索引值,并且进行格式化输出


Østr='hello'

for i,j in enumerate(str):

     print(j,'对应的索引值是',i)

Østr='hello'

for i in str:

     print('%s对应的索引值是%d' % (i,str.index(i)))


#输出h对应的索引值是0

e对应的索引值是1

l对应的索引值是2

l对应的索引值是2

o对应的索引值是4

Østr = 'hello'

for i in str:

    s=str.index(i)

    print('字符:%s 对应的索引值是:%d' % (i, s))

#输出字符:h 对应的索引值是:0

字符:e 对应的索引值是:1

字符:l 对应的索引值是:2

字符:l 对应的索引值是:2

字符:l 对应的索引值是:4

◆先熟悉下range()函数:如果需要遍历一个数字序列,可以使用python中内建的函数range()

for i in range (10) #打印0到9、不包含10

for i in range (1,10) #打印1到9、不包含10

for i in range (0,10,2) #打印结果:0,2,4,6,8不包含10

Ø例:for i in range(10):

             print(i)#输出0123456789  纵向打印

print(i,end='')#输出0123456789   end=''横向打印

Ø例:for i in range(9,0,-1):

         print(i)#输出987654321纵向打印

Ø例:使用for循环求1-100的和

sum=0

for i in range(1,101):

    sum+=i

print(sum)#输出5050

Ø例:使用for循环求1-100的奇数之和

sum=0

for i in range(1,101,2):

    sum+=i

print(sum)#输出2500

Ø例:使用for循环求1-100的偶数之和

sum=0

for i in range(1,101,2):

    sum+=i+1

print(sum)#输出2550

4.4  continue语句
◆用法:continue语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。

Ølist = [1,2,3,4,5,6,7,8,9]

for i in list:

    if i==6:

       continue

    print (i,end='')

#输出12345789

Øfor i in range(10):

     if i==5:

          continue

     print(i,end='')

#输出012346789

4.5  break语句
◆用法:语句会立即退出循环,在其后边的循环代码不会被执行。


Ølist = [1,2,3,4,5,6,7,8,9]

for i in list:

    if i==6:

       break

    print (i,end='')

#输出12345

Øfor i in range(10):

    if i==5:

       break

    print (i,end='')

#输出   01234


练习:求出1/1+1/3+1/5+...+1/99的和

Øi=1

sum=0

for i in range(1,100,2):

    sum+=1/i

print(sum)

Øi=1

sum=0

while i<100:

    sum+=1/i

    i+=2

print(sum)

#输出2.937774848474907

练习:用循环语句计算2-10之间整数的循环相乘的值

Øi=2

sum=1

while i<11:

    sum*=i

    i=i+1

print(sum)

Øsum=1

for i in range(2,11):

    sum*=i

print(sum)#输出3628800

4.6 排序方法

Python基本排序方法:选择排序、插入排序、冒泡排序、快速排序、希尔排序、归并排序、堆排序、基数排序、计数排序、桶排序。

4.6.1 冒泡排序

◆冒泡排序(Bubble Sort):是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这

个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。【这个算法的来由是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序),如同气泡一样最终会浮到液体顶端,故名冒泡排序。】

◆算法思路:

从前到后(即下标较小的元素开始)依次比较相邻元素的值,若发现比后一个值大,则交换位置,使值较大的元素逐渐从前向后移动



★例:

import numpy as np#导入numpy整个模块,并指定别名为np

pop_list = np.random.randint(100,size=6)#从0到100随机取六位数【random()返回随机生成的一个实数。注意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。random.randint() 方法返回

指定范围内的整数】

count=len(pop_list)#使用len函数获取列表长度

for i in range(count-1):#列表长度减一,控制循环次数

   for j in range(count-i-1):#控制索引取值范围

      if pop_list[j]>pop_list[j+1]:

        pop_list[j],pop_list[j+1]=pop_list[j+1], pop_list[j]

print('排序好之后的位置为:',pop_list)

#输出'排序好之后的位置为: [ 4  6  7 35 62 69]'

4.6.2  递归方法

递归方法(recursion  algorithm):在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。【递归就是一个函数在它的函数体内调用它自身】

4.6.2.1  递归的组成部分

◆终止条件:返回函数值,以防止进入一直调用函数的无限递归中,如果没有了递归条件,函数就变成了无限调用)

◆递归步骤:递归函数每步参数之间的关联
        
第一步:找出终止条件:当时间是最后一天,即第十天结束

第二步:确定递归步骤:今天桃子的数量除以2再减去1,就是明天桃子的数量

第三步:将公式进行变形,再更换成具体天数

今天桃子的数量/2-1=明天桃子的数量,

今天桃子的数量=(明天桃子的数量+1)*2

第1天桃子数量=(第2天桃子数量+1)*2

        第2天桃子数量=(第3天桃子数量+1)*2 .......

第四步:创建一个函数并将函数参数设置为天数  

每次调用函数时进行天数的判断,如果天数达到终止条件,则直接设置桃子的数量为1

如果不是第十天即不是最后一天,需要根据递归步骤公式进行计算

Ø【例】猴子吃桃:第一天猴群吃掉了桃子所有的1/2又多一个,第二天猴群吃掉了剩余桃子的1/2又多一个,按照这样的吃法,直到第10天,猴群发现只剩下一个桃子,问猴子一共摘了多少只桃子?

#for循环语句求解              x=1

for i in range(1,10):

    x=(x+1)*2

print('猴子一共摘桃子总数为:',x)

#while语句求解

x=0

y=1

d=9

while d>0:

    x=(y+1)*2

    y=x

    d-=1

print(x)

#输出猴子一共摘桃子总数为: 1534

#递归方法求解

def peach(day):

    if day==10:

        num=1

    else:

        num=(peach(day+1)+1)*2

    return num

print(peach(1))#输出1534

Ø例:递归的阶乘>>求5!

def fn(num):

    if num==1:

        return 1#满足终止条件直接返回1

    else:

        return num*fn(num-1)

print(fn(5))#输出120

递归过程(为了明确递归过程,现对5!进行过程分解)  

def p(n):

                              if n==0:

                                    return

                              print('递归前->',n)

                              p(n-1)

                              print('递归后->',n)

                          p(5)

fn(5)                     #第1次调用使用5

5*fn(4)                   #第2次调用使用4

5*(4*fn(3))               #第3次调用使用3

5*(4*(3*fn(2)))           #第4次调用使用2

5*(4*(3*(2*fn(1))))       #第5次调用使用1

5*(4*(3*(2*1)))           #从第5次调用返回

5*(4*(3*2))               #从第4次调用返回

5*(4*6)                   #从第3次调用返回

5*24                      #从第2次调用返回

120                       #从第1次调用返回

★注意:当num = 998时能输出正确答案,但当num=999及更大数字时,就出现下面的错误了:

RecursionError: maximum recursion depth exceeded in comparison

这是由于默认的Python有一个可用的递归深度的限制,以避免耗尽计算机中的内存。默认是999。 

Ø例:1,1,2,3,5,8,13,21,34,55,试判断数列第十五个数是哪个?

def f(n):

    if n<=2:

        v=1

        return v

    else:

        v=f(n-1)+f(n-2)

        return v

print(f(15))#输出610

4.6.2.2  递归算法主要应用范围
递归算法一般用于解决三类问题:

(1)数据的定义是按递归定义的。(比如Fibonacci函数)

(2)问题解法按递归算法实现。(回溯)[]

(3)数据的结构形式是按递归定义的。(比如树的遍历,图的搜索)  

4.6.2.3  递归的特点

1、必须有一个明确的结束条件

2、每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少

3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调

用的次数过多,会导致栈溢出)

【拓展】

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈

具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈

(POP)。栈也称为先进后出表。

栈可以用来在函数调用的时候存储断点,做递归时要用到栈。

以上定义是在经典计算机科学中的解释。

在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。

栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:

1.函数的返回地址和参数

2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。


                        栈的模型

4.6.2.4  递归优缺点
Ø优点:递归使代码看起来更加整洁、优雅;可以用递归将复杂任务分解成更简单的子问题;使用递归比使用一些嵌套迭代更容易

Ø缺点:递归的逻辑很难调试、跟进;递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

★递归函数就是把每次的调用压入到栈里面,当你调用p(5)时,我们会把p(5)压到栈里面,因为前面有递归的流程,递归流程还没有结束.p(5)等待,接着调用p(4)、p(3)、p(2)、p(1),当调用到p(1)时,递归前面到递归前面的部分还是会被打印

出来,紧接着就p(n-1),也就是1-1=0满足了终止条件,递归结束,栈的话是后进先出的,先会执行p(1)....最后执行p(6)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-1 17:30 , Processed in 0.069494 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表