复习:
深浅copy
浅的copy:只copy列表第一层(底层,第一层所有的内存地址,不区分可变不可变,全都copy,导致copy得到的新列表,无论是读写,都关联到一起)
深copy:每一层都copy,列表嵌套,对所有层都copy(针对列表第一层,做区分,不可变的内存地址直接copy(沿用原来的地址),可变的创建新的内存地址,然后具体的值还是指向原来的值)关键:跟原来的列表改写操作,会独立开。

while循环(重复做某件事)
while+条件(条件成立执行),换行缩进,子代码
退出循环两种方式:
1)条件在某个时刻,变成false(需要在下一次循环的时候生效,退出循环)
2)break,只要运行到break,立马跳出该层

嵌套的时候跳出循环,每一个while条件加上最内层的条件判定false;用break,得在每一层while循环都要配套break

while+continue(终止本次循环,直接进入下一次循环)
continue之后不要写重复的其他代码,因为是不会执行的

while+else(while循环结束以后,并且不是被break强制退出的时候,才会运行else之下的子代码)

----------今日----------

循环之for循环(迭代循环,取值循环,在某种场景下,比前者更简洁)
what:python提供的第二种循环机制
why:理论上for循环能做的事情,while循环都可以做;之所以要有for循环,是因为在for循环在循环取值(遍历取值)上比while循环上更简洁
how:基本语法与使用
        for 变量名 in 可迭代对象(函数的时候,一并讲解;可以是:列表,字典,字符串,元祖,集合) :
            代码块

    1.1、for循环应用
案例1:列表循环取值
简单版
l = ['alex_dsb','lxx_dsb','egon_nb']
for x in l:  # 第一次x=alex_dsb,后面依次覆盖x的值
    print (x)
复杂版
l = ['alex_dsb','lxx_dsb','egon_nb']
i = 0
while 1 < 3 :
    print(l[i])
    i += 1

案例2:字典循环取值
简单版
dic = {'k1':111,'k2':222,'k3':333}
for x in dic :
    print (k,dic[k])
复杂版:while循环可以遍历字典,太麻烦了

案例3:字符串循环取值
简单版
msg = 'you can you up,no can no bb'
for x in msg :
    print(x)

总结:for&while
1、相同:都是循环,for能做的,while都能做
2、不同:while(条件),循环次数取决条件什么时候变假
        for(取值),循环次数取决in后包含的的值的个数

for循环控制循环次数:range(),在python3当中得到的是一直“会下单的老母鸡”,需要的值,临时建造出来
有局限性(顾头不顾尾,最后只能取到倒数第二个值):
range(10)  # 0到9,python2
range(1,9)  # 1到8,python2
range(1,9,1)  # 1到9,最后一个参数位步长,就是1到下一个数字的间隔,python2
补充range:
for搭配range,可以按照索引取值
l = ['aaa','bbb','ccc']
for i in range(len(l))
    print (i,l[i])

    1.2、for循环嵌套
        for i in range(3):
            print ('外层循环-->',i)
            for j in range(5):
                print ('内层-->',j)  # 外层循环每循环一次,内层都要完整的循环一遍,终止for循环只有break一种方案

    1.3、for+break
        for x in range(3) :
            inp_name = input('name: ')
            inp_pwd = input('passwd: ')
            if usrname == inp_name and passwd == inp_pwd :
                print ('成功')
                break

    1.4、for+continue
        for i in range(4):
            if i == 4:
                continue
            print (i)

    1.5、for+else

关于print的补充
print逗号的使用:
    print('hello','world')  #
print换行符:
    print('hello\n')
    print('world')
print值end参数的使用:
    print('hello',end='*')
今日内容:基本数据类型极其内置方法(python解释器预先提供好的,方便使用)
        1、数字
            1.1、int
                作用:记录整数相关的数值
                定义:对于整数的赋值,eg:age = 10  # 相当于age = int (10)
                    名字+(),触发一个功能,括号内的为需要传递的参数,得到的结果为返回值
                类型转换:int(),可以转换纯数字的字符串转成int(带有小数点的float不能)
                        数字分各种进制的概念
                            10->二进制,除二取余法。  # 11->1011
                            二进制->十进制
                        10->2  # print (bin(11))  结果开头的0b代表二进制
                        10->8  # print (oct(11))  结果开头的0o代表八进制
                        10->16 # print (hex(11))  结果开头的0x代表十六进制

                        2->10  # int('0b1011',2)  后面的2代表二进制
                        2->8   # int('0o13',8)  后面的8代表八进制
                        2->16  # int('0xb',16)  后面的16代表十六进制
                使用:

           1.2、float
                作用:记录小数相关的数值
                定义:对于小数的赋值,eg:salary = 3.1
                类型转换:float('3.1'),转换完之后可以与int类型做数学运算
----------数字类型(int&float)的使用:
            没有需要掌握的内置方法,他们的使用就是数学运算+比较运算

----->了解:数字类型还有一种类型叫虚数(有些场景使用i表示,有些场景使用j表示,因为i跟物理上的单位冲突)
            x = 10 + 2j
            x.real  # 查看真实部分
            x.imag  # 查看虚数部分
            python2中还有长整形long,python3中直接并到了int类型中

        2、字符串
            作用:记录描述性质的状态
            定义:单、双、三引号(单双都可以)之内具有描述性质的字符串
            类型转换:str(),可以把任意其他类型都转成字符串
            使用:内置方法
                2.1、按照索引取值(正向+反向取值):只能取
                    正向取:
                        msg = 'hello world'
                        print(msg[0])
                    反向取:
                        print(msg[-1])
                    只能取(字符串是不可变类型,python对于有序的东西都会提供了索引的功能):
                        msg[0] = 'H'
                2.2、切片:索引的拓展应用,从一个大字符串中copy出一个子字符串
                        msg = 'hello world'
                        res = msg[0:5]  # 顾头不顾尾
                        print(res)
                     步长
                        res = msg[0:5:2]
                        print(res)
                     反向步长
                        res = msg[5:0:-1]  # 起始位置位第六个字符,结束位置为第一个字符,但是第一个字符取不到
                        print(res)
                     res = msg[:]  # 从开头到结尾,完整的copy
                     res = msg[::-1]  # 将字符串倒过来完整输出一遍
                2.3、同级长度len
                     print(len(msg))
                2.4、成员运算in和not in,判断一个子字符串是否存在与一个大字符串中
                     print('alex' in 'alex is sb')
                     print('alex' not in 'alex is sb')
                2.5、移除空白strip:默认移除字符串左右两侧的符号
                     msg =  '       egon       '
                     res = msg.strip()  # 默认去掉空格,不会改变原值
                     print(res)
                     了解:strip只去掉两边,不去中间
                        eg:msg = '******e***gon******'
                           print(msg.strip('*'))
                           --->e***gon
                     应用:
                        inp_user = input('your name>>:').strip()    # 防止用户手抖多输入空格
                        inp_pwd = input('your name>>:').strip()
                        if inp_user == 'egon' and inp_pwd == '123'
                            print('成功')
                        else :
                            print('失败')
                2.6、切分split:把一个字符串按照某种分隔符尽情切分,得到一个列表
                     info = 'egon:18:male'
                     info.split(':')  # 括号内的参数不做传导,默认分割符为空格

                     info.split(':',1)  # 后面的1代表指定的分隔次数

                2.7、循环字符串
                     info = 'egon:18:male'
                     for x in info :
                        print(x)

                2.8、strip,lstrip,rstrip
                     lstrip()  #只去左边
                     rstrip()  #只去右边

                2.9、lower,upper:全都改成大写,改成小写

                2.10、startswith,endswith:判断是否是某字符开头或者结尾

                2.11、format
        
                2.12、split,rsplit:将字符串切成列表
                     rsplit:从右往左切

                2.13、join:把列表拼接成为字符串
                     l = ['egon','18','male']
                     res = ':'.join(l)  # 按照某个分隔符,把元素全为字符串的列表拼接成一个大字符串

                2.14、replace:字符替换
                     msg = 'you can you up'
                     msg.replase('you','YOU',)  # 最后一个

                2.15、isdigit:判断字符串是否由纯数字组成
                     age = input('输入年龄: ').strip()
                     if age.isdigit():
                         age = int (age)
                     else:
                        print('必须要输入数字')
------------>了解
                2.16、find,rfind,index,rindex,count
                     msg.find('e')  # 返回要查抄的字符串在大字符串中的起始索引,返回的找到的值的位置,找不到返回-1
                     msg.index('e')  # 找不到的时候,程序直接异常

                     msg='hello egon hahaha egon、 egon'
                     print(msg.count('egon'))  # 计算出egon这个单词出现的次数

                2.17、center,ljust,rjust,zfill
                     print('egon'.center(50,'*'))  # 居中对齐
                     print('egon'.ljust(50,'*'))  # 靠左对齐
                     print('egon'.rjust(50,'*'))  # 靠右对齐
                     print('egon'.zfill(10))  # 规定只能靠右对齐,用0补全

                2.18、expandtabs
                     msg='hello\tworld'
                     print(msg.expandtabs(2)) # 设置制表符代表的空格数为2

                2.19、captalize,swapcase,title
                     print("hello world egon".capitalize())
                     print("Hello WorLd EGon".swapcase())
                     print("hello world egon".title())

                2.20、is系列
                     print('abc'.islower())
                     print('ABC'.isupper())
                     print('Hello World'.istitle())
                     print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True
                     print('ad'.isalpha()) # 字符串由由字母组成结果为True
                     print('     '.isspace()) # 字符串由空格组成结果为True
                     print('print'.isidentifier())
                     print('age_of_egon'.isidentifier())
                     print('1age_of_egon'.isidentifier())

                2.21、is系列中识别数字(isdigit、isnumberic、isdecimal)
                     num1=b'4' #bytes
                     num2=u'4' #unicode,python3中无需加u就是unicode
                     num3='四' #中文数字
                     num4='Ⅳ' #罗马数字

                     isdigit只能识别:num1、num2
                     print(num1.isdigit()) # True
                     print(num2.isdigit()) # True
                     print(num3.isdigit()) # False
                     print(num4.isdigit()) # False

                     isnumberic可以识别:num2、num3、num4
                     print(num2.isnumeric()) # True
                     print(num3.isnumeric()) # True
                     print(num4.isnumeric()) # True

                     isdecimal只能识别:num2
                     print(num2.isdecimal()) # True
                     print(num3.isdecimal()) # False
                     print(num4.isdecimal()) # False