python day07

补day06

可变类型:比喻瓶子里装水,换水不换瓶,一种容器类型。

不可变类型:是一个不可分割的整体,如name="egon",不能说name="e"

短路运算(偷懒原则,偷懒到那个位置,就把当前的值返回)

10>3 and true -----true#要算到第二个

10<3 and true------false#只用算到第一个

10>3 and 10 and 0 and 10-------0#算到第三个,返回第三个的值

10>3 and 10----10#算到第二个,返回第二个的值

(10>3 and 10 and 0 and 10)  or (10>3 and 1==1)-----false  or true -----true#先算and ,算到后面才能停止

一,深浅copy之浅copy

1.1

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

list2=list1#这叫赋值不叫copy

此时两者不可分割,list1改list2也会跟着修改,因为指向的是同一个内存地址

1.2 需求:

1,拷贝一下原列表产生一个新列表

2,想让两个列表完全独立开来,针对的是改操作而不是读操作

1.3 如何copy列表

1.3.1浅copy

把原列表第一层的内存地址不加区分,完全copy一份给新列表

对于可变类型,任然可以改变可变类型中包含的值,但浅copy中可变类型的内存地址不变

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

list3=list1.copy

list1[0]='EGON'

list1[1]='LXX'

list1[2][0]='111'

list1[2][1]='222'

print(list1)-------['EGON','LXX',[111,222]]

print(list3)------['egon','lxx',[111,222]] #浅copy的话把原列表的第一层内存地址复制下来,即使list1赋新值,产生了新的内存地址,list3复制的原来第一层内存地址,不可变类型顺着原列表第一层的内存地址不会变,但是可变类型会顺着第一层的内存地址找到第二层内存地址里list1可变类型所改的值,所以可变类型会变。

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

1.3.2深copy

import copy

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

list4=copy.deepcopy(list1)

list1[0]='EGON'

list1[1]='LXX'

list1[2][0]='111'

list1[2][1]='222'

print(list1)-------['EGON','LXX',[111,222]]

peint(list4)-----['egon','lxx',[1,2]]#独立于list1的copy,深copy会区分可变与不可变类型,不可变类型会把原列表的第一层内存地址复制下来,即使list1赋新值,产生了新的内存地址,list4复制的不可变类型的第一层内存地址,所以不可变类型不会变,但可变类型会产生一个新的内存地址,存放原列可变类型的内容(如换了一个瓶子,装原来的水),所以可变类型不会变

二,while循环(条件循环)介绍与基本使用

'''

while 条件:

    代码1

    代码2

    代码3

'''

流程如图

count=0

while count <5

    print(count)

    count +=1

print('小白菜')-----------0 1 2 3 4  小白菜

三,死循环与效率问题

涉及到io问题

while True:

    name=input(''your name>>>>>")

    print(name)------输入名字后会继续输出your name>>>>>

纯计算无io的死循环会导致致命的效率问题

while 1:

    print('xxx')------将会一直输出xxx

四,while循环的应用

use_name='egon'

password='123'

#输入错误的账号和密码需要重复

#输入对后不需要重复

while:

    inp_name=input('请输入您的账号')

    inp_password=input('请输入您的密码')

    if inp_name == use_name and inp_password == password

        print('登入成功')

    else:

        print('请重新输入账号')------账号输入小程序

五, 退出循环的两种方式

方式一:将条件改为false

tag=True

while tag:

    inp_name=input('请输入您的账号')

    inp_password=input('请输入您的密码')

    if inp_name == use_name and inp_password == password

        print('登入成功')

    tag=false #下面的代码还会运行,等到下次循环判断条件才生效

    else:

        print('请重新输入账号')

    print('=====end====')

方式二:break(只要运行到break就会立刻终止本层循环)

tag=True

while tag:

    inp_name=input('请输入您的账号')

    inp_password=input('请输入您的密码')

    if inp_name == use_name and inp_password == password

        print('登入成功')

       break #立刻终止本层循环

    else:

        print('请重新输入账号')

    print('=====end====')------这行代码就不会运行了

六, while的嵌套

方式一:

'''#每一层都需要配套的break

while True:

    whileTrue:

        whileTrue:

            break

        break

    break

'''

方式二:

'''

tag=True

while tag:

    while tag:

        while tag:

            tag=false#结束循环

'''

方式一的案例

tag=True

while tag:

    inp_name=input('请输入您的账号')

    inp_password=input('请输入您的密码')

    if inp_name == use_name and inp_password == 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_password=input('请输入您的密码')

    if inp_name == use_name and inp_password == password

        print('登入成功')

    while True:

        cmd=input'输入命令:'

        if cmd=='q'

            tag=false

        else:

             print('命令{x}正在运行' .format(x=cmd))

    else:

        print('请重新输入账号')

七,while+continue :

结束本次循环,直接进入下一次

#强调:在continue之后添加同级代码毫无意义,因为不会执行

跳过4,打印0,1,2,3,5

count=0

while count <6

    if count == 4

        count +=1

        countinue

        #count +=1#放这里哒mei

    print(count)

    count+=1

八, while+else

while True:

    ....

else:

    print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束,才会运行')

实现输错三次,停止运行,并且有提示语提示

版本一

count=0
tag=True
while tag:
    if count == 3:
        print('输错三次退出')
        break
    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('账号名或密码错误')
        count+=1

版本二:优化

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次,退出')

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值