python基础006----流程控制&推导式&深浅拷贝

一、流程控制

1、if语句

#if语句-----if:  elif(可以多个):  else(只有一个):
num=10
#if elif 是一个判断,一个条件执行之后就不会有第二个条件执行
if num<30:
    print('if elif循环:<30')
elif num < 100:
    print('if elif循环:<100')
#if if 是两个不同的判断,互不影响
if num<30:
    print('if 循环:<30')
if num < 100:
    print('if 循环:<100')
#嵌套判断---内层是在外层成立的前提下成立的
if num<15:
    if num>8:
        print('15>num>8')
else:
    print('11')
    if num<30:
        print('15<num<30')

 

2、for循环

#for语句
for i in range(10):   #10表示终止值(计数到终止值结束,不包括终止值),输出0-9的数字
    print(i,end=' ')    #end=' '表示不换行
print('\n')
for i in range(3,10):   #3表示起始值,10表示终止值,输出3-9的数字
    print(i,end=' ')
print('\n')
for i in range(3,10,2):   #3表示起始值,10表示终止值,2为步长,输出3-9之间的奇数
    print(i,end=' ')
print('\n')
#字符串的遍历
str='hello world'
for i in str:
    print(i,end='-')
#特殊的for循环
a=[(1,2),(3,4)]
for i in a:
    print(i,end='')
print('\n')
for i in a:
    print(i[0],end='--')
print('\n')
for i in a:
    print(i[1],end='--')
print('\n')
for i,j in a:              #i,j=(1,2)序列解包赋值
    print('这是i:%s'%i,end='--')
    print('这是j:%s'%j, end='--')
#嵌套循环(重要)---打印九九乘法表
for i in range(1,10):          #外层循环一次,内层循环一遍
    for j in range(1,i+1):
        print('%s*%s=%s\t'%(i,j,i*j),end='')
    print()
#嵌套循环(重要)---打印九九乘法表
for i in range(1,10):          #外层循环一次,内层循环一遍
    for j in range(1,i+1):
        print('%s*%s=%s\t'%(i,j,i*j),end='')
    print()

 

3、while循环

#while循环
while True:            #python中默认的死循环条件是True
    print('这是一个死循环')  #死循环会阻塞程序进行,多用于图形化、游戏等可视化的主循环
#while普通循环
i=11
while i<10:
    print('i<10')
else:
    print('i>=10')
#while嵌套循环----和for嵌套的类型一致
n=int(input('请输入你要输入的数字:'))    #输出*直角三角形
i=1
while i<=n:
    j=1
    while j<=i:
        print('*\t',end='')
        j+=1
    print()
    i+=1

 

4、pass、continue、break的使用

#pass continue break的使用
str='hello world'
for i in str:
    if i=='o':
        pass          #pass写在任何缩进的语句块部分,只是占位,什么事情都不做
    print(i,end=' ')
print()
for i in str:
    if i=='o':
        break          #break在循环过程中直接退出循环,通常都必须配合if语句使用
    print(i,end=' ')
print()
for i in str:
    if i=='o':
        continue          #continue语句可以提前结束本轮循环,并直接开始下一轮循环,通常都必须配合if语句使用
    print(i,end=' ')

 

二、推导式(面试题)

1、列表推导式

       列表推导式能非常简洁的构造一个新列表,只用一条简洁的表达式即可对得到的元素进行转换变形,语法:[ 变量   for  变量   in   可迭代对象 ],其代码实例如下:

#列表推导式
list1=[]           #生成一个列表,列表中元素为0-9
for i in range(10):
    list1.append(i)
print('普通方法生成列表:',list1)
list2=[i for i in range(10)]   #推导式生成一个列表---代码简洁很多
print('推导式生成列表:',list2)
list3=[i for i in range(10)if i%2==0]   #推导式生成一个列表---列表元素为偶数
print('推导式生成偶数元素列表:',list3)
#利用列表推导式取出嵌套列表中的元素
l=[[1,2,3],[4,5,6],[7,8,9]]
print('利用推导式取出嵌套列表每个元素的第一个值:',[i[0] for i in l])
print('利用推导式取出嵌套列表每个元素的第二个值:',[i[1] for i in l])
print('利用推导式列表中的1,5,9:',[l[i][i] for i in range(len(l))]) #第一次i=0,l[i][0]取下标为0的第一个元素l[0][0]
print('利用推导式取出嵌套列表的所有元素:',[l[i][j] for i in range(len(l))for j in range(len(l))])
print('两个for循环生成嵌套列表:',[[i,j] for i in range(1,5)for j in range(6,10)])
print('三个for循环生成嵌套列表:',[(i,j,z) for i in range(1,3)for j in range(4,6)for z in range(7,9)])

输出结果:

2、字典推导式

     字典推导式和集合推导式是列表推导式思想的延续,语法差不多,只不过产生的是集合和字典而已,其具体实例如下所示:

              

3、集合推导式

      集合推导式与列表推导式非常相似,唯一的区别是用{}代替[  ],其具体实例如下所示:

                

4、元组生成器

               

、深浅拷贝(面试题)

1、深浅拷贝定义

    (1)深拷贝:拷贝所有对象,包括顶级对象以及嵌套对象,所以原始对象的改变不会造成深拷贝里任何子元素的改变。

    (2)浅拷贝:只拷贝顶级对象,没有拷贝嵌套对象,所以原始数据改变,嵌套对象会改变。

2、应用场景

  (1)在CMDB系统中,我们定义了一个报警模板 给所有的服务器使用,此时有一批特殊应用的服务器需要不同的报警参数,我们既不想单独新建模版来一个一 个添加报警参数,又不想修改默认模板而影响其他机器的报警阈值。此时我们就需要用深拷贝来完成。

  (2)我们在维护服务器信息的时候经常会要更新服务器信息这时我们重新一个一个添加是比较麻烦的,我们可以把原数据类型拷贝一份,在它的基础.上做修改。

3、深浅拷贝的使用

import  copy
a=[1,2,3,4,[5,6,7,9,10]]
b=a
print('a的id:%s,b的id:%s'%(id(a),id(b)))    #赋值语句不改变id
c=copy.copy(a)          #浅拷贝
print('输出浅拷贝后的id:',id(c))
d=copy.deepcopy(a)      #深拷贝
print('输出深拷贝后的id:',id(d))
a.append(8)
a[4].append(9)
print('修改后输出a:',a)
print('修改后输出b:',b)
print('修改后输出浅拷贝的列表c:',c)    #浅拷贝,原始数据改变,嵌套对象会改变
print('修改后输出深拷贝的列表d:',d)    #深拷贝,原始对象改变不会造成深拷贝里任何子元素的改变

输出结果:

     

、练习

1、给定一个字符串,例:‘abcsadfadsfgfegegegea’,经过计算返回一个字典,字典中包含每个元素当中的个数。

##1、给定一个字符串,经过计算返回一个字典,字典中包括每个元素的个数
str='abcsadfadsfgfegegegea'
dic={ }
for i in str:
    if i in dic:
        dic[i]+=1
    else:
        dic[i]=1
print('计算返回的字典为:',dic)

输出结果:

    

2、输入一个整数(代表树干的高度),打印出一棵树。

##2、输入一个整数(树干的高度),打印一个*树
num=int(input('请输入树干的高度:'))
for i in range(1,num+1):
    print('\033[5;35m'+' '*(num-i)+(2*i-1)*'*'+'\033[0m') #设置颜色开始 :\033[显示方式;前景色m;背景色m
a=num
while a>0:
    print((num-1)*' '+'*')
    a-=1

输出结果:

   

3、输入任意行文字,存于列表L中,当不输入人格内容直接回车后结束输入:

      (1)打印L列表中的内容

      (2)计算你共输入了几行内容

      (3)计算你共输入了几行字符

##3、将输入文字存入列表,并统计行数和字符数
l=[]
while True:
    text=input('请输入想要输入的内容:')
    if text:
        l.append(text)
        print(l)
    len_text=len(l)
    print('计算输入的几行内容:',len_text)
    n=0
    for i in l:
        n+=len(i)
    print('计算总共字符:',n)
    if text=='':
        break

输出结果:

    

4、写一个程序,任意输入一个整数,判断这个数是否是素数,素数(也叫质数)是只能被1和自身整除的正整数。提示:用排除法,判断x是不是素数,只要让x分别除以2,3,4,5,...x-1,只要整除了,那x不是素数,否则x是素数。

##4、判断一个数是不是素数
n=int(input('请输入整数:'))
if n>1:
    for i in range(2,n):
        if n%i==0:
            print('%s不是素数'%n)
            break
    else:
        print('%s是素数'%n)
else:
    print('无法判断')

输出结果:

5、算出100-1000以内的水仙花数,水仙花数是指百位上数的3次方加上十位的3次方加上个位的三次方等于原数

##5、输出100-1000之间的水仙花数
for i in range(100,1000):
    a=i//100    #百位数字
    b=i%10      #个位数字
    c=i//10%10  #十位数字
    if i==a**3+b**3+c**3:
        print(i)

输出结果:

    

posted @ 2021-04-06 14:27  搁浅的青木儿  阅读(95)  评论(0编辑  收藏  举报