Python基础之流程控制与深浅拷贝

一、if判断

  语法1:

    if 条件:
      代码1
      代码2
      代码3
age = 60
is_beautiful = True
star = '水平座'

if age > 16 and age < 20 and is_beautiful and star == '水平座':
    print('好配。。。')

print('其他代码.............')
 

  语法2:

    if 条件:

      代码1
      代码2
      代码3
    else:
      代码1
      代码2
      代码3
age = 60
is_beautiful = True
star = '水平座'

if age > 16 and age < 20 and is_beautiful and star == '水平座':
     print('我喜欢,我们在一起吧。。。')
else:
     print('阿姨好,我逗你玩呢,深藏功与名')

print('其他代码.............')

  语法3:

    if 条件1:
      代码1
      代码2
      代码3
    elif 条件2:
      代码1
      代码2
      代码3
    elif 条件2:
      代码1
      代码2
      代码3
score = input('请输入您的成绩:') # score="18"
score=int(score)

if score >= 90:
     print('优秀')
elif score >= 80:
     print('良好')
elif score >= 70:
     print('普通')
 

  语法4:  

    if 条件1:
      代码1
      代码2
      代码3
    elif 条件2:
      代码1
      代码2
      代码3
    elif 条件2:
      代码1
      代码2
      代码3
    else:
      代码1
      代码2
      代码3
score = input('请输入您的成绩:') # score="18"
score=int(score)

if score >= 90:
     print('优秀')
elif score >= 80:
     print('良好')
elif score >= 70:
     print('普通')
else:
     print('很差,小垃圾')
print('=====>')

  if嵌套:

age = 17
is_beautiful = True
star = '水平座'
 
if 16 < age < 20 and is_beautiful and star == '水平座':
    print('相配。。。。。')
    is_successful = True
    if is_successful:
        print('好生活。。。')
else:
    print('摆烂')
 
print('其他代码.............')

 

二、while循环

  1.基本使用:   

    print(1)
    while 条件:
       代码1
       代码2
       代码3
    print(3)
count=0
while count < 5: 
     print(count) 
     count+=1            #此时就会一致循环,循环一次count+1,知道count等于5,不满足while count < 5:,就跳出循环

print('顶级代码----->')

   2.循环的应用:

username = 'aaa'
password = '123'

# 1、重复代码
# 2、输对了应该不用再重复
while True:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')

    if inp_name  == username and inp_pwd == password:
        print('登录成功')
    else:
        print('账号名或密码错误')    

  3.退出循环的两种方式

    3.1 将条件改为False,等到下次循环判断条件时才会生效

tag=True
while tag:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        tag = False # 之后的代码还会运行,下次循环判断条件时才生效
    else:
        print('账号名或密码错误')

    3.2 break,只要运行到break就会立刻终止本层循环

while True:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        break # 立刻终止本层循环
    else:
        print('账号名或密码错误')

  4.while循环嵌套与结束

    每一层都必须配一个break:

while True:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        while True:
            cmd=input("输入命令>: ")
            if cmd == 'q':
                break
            print('命令{x}正在运行'.format(x=cmd))
        break # 立刻终止本层循环
    else:
        print('账号名或密码错误')                        

    改变条件的循环嵌套:

# # 改变条件的方式
tag=True
while tag:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        while tag:
            cmd=input("输入命令>: ")
            if cmd == 'q':
                tag=False            #此时改变条件
            else:
                print('命令{x}正在运行'.format(x=cmd))
    else:
        print('账号名或密码错误')                

  

  5.while +continue:结束本次循环,直接进入下一次

    强调:在continue之后添加同级代码毫无意义,因为永远无法运行
count=0
while count < 6:
    if count == 4:
        count+=1
        continue
        # count+=1 # 错误,此时不执行
    print(count)
    count+=1
#此时打印结果就是:0 1 2 3 5,因为等于4的时候就直接结束循环,然后从头开始执行。

    while +else:针对break

count=0
while count < 6:
    if count == 4:
        count+=1
        continue
    print(count)
    count+=1
else:
    print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
#此时输出结果为:0 1 2 3 5 "else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行",因为此时没有break,while结束后就执行else
count=0
while count < 6:
    if count == 4:
        break
    print(count)
    count+=1
else:
    print('======>')
#此时输出结果为:0 1 2 3 ,当等于4的时候就被break结束循环,且后面else不在执行

  实际应用:

username = 'aaa'
password = '123'
count = 0
while count < 3:
inp_name = input('请输入您的账号:')
inp_pwd = input('请输入您的密码:')
if inp_name == username and inp_pwd == password:
print('登录成功')
while True:
cmd = input("输入命令>: ")
if cmd == 'q': # 整个程序结束,退出所有while循环
break
else:
print('命令{x}正在运行'.format(x=cmd))
break
else:
print('账号名或密码错误')
count += 1
else:
print('输错3次,退出')

 

三、for循环

  理论上for循环能做的事情,while循环都可以做,之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁
  语法:
    for 变量名 in 可迭代对象:               # 可迭代对象可以是:列表、字典、字符串、元组、集合
      代码1
      代码2
      代码3
  使用:
    1.for基本使用之循环取值
      列表循环取值
l = ['aa', 'bb', 'cc']
i=0
while i < 3:
    print(l[i])
    i+=1

      字典循环取值

dic={'k1':111,'k2':2222,'k3':333}
for k in dic:
    print(k)
    print(k,dic[k])

      字符串循环取值

msg="you can you up,no can no bb"
for x in msg:
    print(x)
#就是一个字母一个字母的打印

    

    2.for循环控制循环次数:range()

    range在python2与python3中的区别 (常问)

         python2中:

                    1.range其实就是一个列表
       2.xrange其实就是你python3中的range

    python3中:

           range就是一种迭代,不占具多余的内存空间,需要时才会取出相对应的值

in后直接放一个数据类型来控制循环次数有局限性:
当循环次数过多时,数据类型包含值的格式需要伴随着增加
# range功能介绍

range(10)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(1,9) # 1...8
#[1, 2, 3, 4, 5, 6, 7, 8]

range(1,9,1) # 1 2 3 4 5 6 7 8 
#[1, 2, 3, 4, 5, 6, 7, 8]

range(1,9,2) # 1 3 5 7     #从1-8,步长为2
#[1, 3, 5, 7]    
    for+break: 同while循环一样
    for+else:同while循环一样
    for+continue: 当执行到continue
username='aaa'
password='123'
for i in range(3):
    inp_name = input('请输入您的账号:')
    inp_pwd = input('请输入您的密码:')

    if inp_name == username and inp_pwd == password:
        print('登录成功')
        break
else:
    print('输错账号密码次数过多')
#当触发break就直接退出当前程序,否则输入三次不对,执行else
for i in range(6):  # 0 1 2 3 5
    if i == 4:
        continue
    print(i)
#循环六次,但是当值为4,触发continue,重新执行for循环,但是是接着4,执行5 

        

终止for循环只有break一种方案

######## 循环总结

  总结for循环与while循环的异同
    1、相同之处:都是循环,for循环可以干的事,while循环也可以干
    2、不同之处:
          while循环称之为条件循环,循环次数取决于条件何时变为假
          for循环称之为"取值循环",循环次数取决in后包含的值的个数
 
补充:print('hello',end="*"),参数end指打印结果按照什么结尾
print('hello',end='*')
>>>hello*


四、深浅拷贝
  1.浅拷贝:是把原列表第一层的内存地址不加区分完全copy一份给新列表
list1 = [
    'egon',
    'lxx',
    [1, 2]
]
list3 = list1.copy()
print(id(list1))
print(id(list3))           #二者id不一样

print(id(list1[0]),id(list1[1]),id(list1[2]))
print(id(list3[0]),id(list3[1]),id(list3[2]))          #二者具体值的id一样

#对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表
list1[0]='EGON'
list1[1]='LXX'
list1[2]=123
print(list1)
print(list3)                     #此时改变list1的赋值,list1会变成新的值,而list3还是原来的值

#但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受影响,如下
list1[2][0]=111
list1[2][1]=222
print(list1)
print(list3)                      #此时list1与list3的值的结果一样

  2、深拷贝

    得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy

import copy

list1 = [
    'egon',
    'lxx',
    [1, 2]
]

list3 = copy.deepcopy(list1)
# print(id(list1))
# print(id(list3))
# print(list3)

#          不可变        不可变        可变
# print(id(list1[0]),id(list1[1]),id(list1[2]))
# print(id(list3[0]),id(list3[1]),id(list3[2]))
'''
4497919088 4498367856 4498449216
4497919088 4498367856 4498595328
'''
# print(list3)
# print(id(list1[2][0]),id(list1[2][1]))
# print(id(list3[2][0]),id(list3[2][1]))

list1[0] = 'EGON'
list1[1] = 'LXX'

list1[2][0] = 111
list1[2][1] = 222

print(list1)
print(list3)       #即使修改了list1,但是对list1的可变与不可变类型的修改,都不会对list3造成影响

 

 
 
 
posted @ 2022-03-25 20:45  新入世界的小白  阅读(41)  评论(0)    收藏  举报