ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第四讲 Python中的常见语句

2022-08-22 09:35:00  阅读:191  来源: 互联网

标签:语句 输出 递归 Python sum dict print 第四


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

字符:o 对应的索引值是: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)

标签:语句,输出,递归,Python,sum,dict,print,第四
来源: https://www.cnblogs.com/ZHH-CY/p/16611716.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有