zoukankan      html  css  js  c++  java
  • python-day2

    1. while循环

    写代码的本质:程序员设定好程序执行流程(写代码),让程序去代替人做事。

    1.1 基本结构

    while 条件:
       PASS

    1.2 常见4种形式

    import time

    print('开始')
    while True:
       print('今天天气不错')
       print('心情挺好的')
       time.sleep(1)
    print('结束')
    while 1 > 2:
       print('...')
    data = True
    while data:
       pass
    num = 90
    while num > 10:
       pass

    1.3 快速练习题

    • # 快速循环 1..100
      num = 1
      while num < 101:
         print(num)
         num += 1
    • # 循环输出 1..10,即 10以内除了7以外的所有整数
      num = 1
      while num < 11:
         if num != 7:
             print(num)
         num += 1
    • # 循环输出 100 - 1 的所有整数
      num = 100
      while num > 0:
         print(num)
         num -= 1
    • # 循环输出 10 - 1 倒序
      num = 10
      while num > 0:
         print(num)
         num -= 1
    • # 输出 1 ~ 100 内的所有奇数
      num = 1
      while num < 101:
         if num % 2 ==0:
             print('this num is 偶数',num)
         num += 1
    • # 用户登录

      flag = True
      while flag:
         username = input('please input name: ')
         passwd = input('please input password: ')
         
         if username == 'alex' and passwd == 'sb':
             print('登录成功')
             flag = False
         else:
             print('用户名或密码错误')
    • '''设置一个理想的数字比如66: 一直提示用户输入数字,如果比66大,
      则显示猜测的数结果大了,如果比66小了,则显示小了'''

      num = 66
      flag = True

      while flag:
         user_num = int(input('please input num: '))
         if user_num == num:
             print('猜对了')
             flag = False
         elif user_num < 66:
             print('小了')
         else:
             print('大了')

    1.4 break 关键字

    只能搭配循环语句使用。

    只有在循环语句中,可以使用break语句(只有在某种特定的场景下)。

    break关键字的作用:在循环中一旦遇见break关键字,就会直接终止循环,往后继续执行其他代码。

    print('start...')
    while True:
       print('你是风儿我是沙')
       break
       print('QNM的风和沙')
    print('END')
    # 用户登录

    while True:
       username = input('please input name: ')
       passwd = input('please input password: ')
       
       if username == 'alex' and passwd == 'sb':
           print('登录成功')
           break
       else:
           print('用户名或密码错误')

    1.5 continue 关键字

    与循环配合使用的关键字

    continue,停止当前循环开始下次循环

    while True:
       print('狭路相逢')
       continue
       print('勇者胜')
    # 循环输出 1..10,即 10以内除了7以外的所有整数

    num = 1
    while num < 11:
       if num == 7:
           num += 1
           continue
       print(num)
       num += 1
    i = 1
    while i < 10:
        print(i)
        j = 100
        while j < 103:
            print(j)
            j += 1
        i += 1

     

    2. 字符串的格式化

    方便我们进行字符串的拼接和处理

    v1 = 'alex'
    v2 = 'sb'
    v3 = v1 + 'is' + v2

     

    2.1 Python 中有三种字符串格式化的方式

    2.1.1 % s 是一个中传统的方式(建议)

    %s 充当占位符,一般情况下是占字符串类型

    name = 'alex'
    tpl1 = '我的名字叫%s,我是一个大SZ' % name
    tpl2 = '我的名字叫%s,我是一个大SZ' %'alex'
    print(tpl1)
    print(tpl2)
    #%s: 占位符

    2.1.2 %d 整型

    tpl = '我今年%d岁' %18
    print(tpl)

    2.1.3 百分比

    tpl1 = '我就得我能学会python的几率大概有%10'
    tpl2 = '我就得我能学会python的几率大概有%d%%' % 80

    ** 建议: 字符串和整型分开

    2.1.4 N个占位符

    tpl = 'my name is %s,age is %d ' %('ales',18)
    print(tpl)

     

    2.2 format, 升级版

    date = 'my name is {0}, age:{1},在{2}工作'.format('alex',18,'BJ')
    print(date)

    2.3 f, python3.6及以后

    name = 'alex'
    age = 17
    print(f'my name is {name},age is {age+1}')

     

    3. 运算符

    3.1 算数运算符

    +     -     *     /      //     %

    3.2 比较运算符

    ==   !=   >    <     >=     <=

    3.3 赋值运算符

    ==     +=     -=     *=     /=     

    3.4 判断运算符

    in      not in
    data = 'alex is sb'
    if 'sb' in data:
        print('Ture')
    else:
        print('False')
    ## 注意: 字符串,元祖,列表,字典,集合  可以用

    3.5 逻辑运算符

    if name == 'alex' and pwd = '123':
        pass
    if name == 'alex' and and = 'eric':
        pass
    date = input('please input: ')
    
    value = bool(date)
    if not value:     
        print('请输入内容,内容不允许为空')
    else:
        print(666)

    3.6 源码和面试题

    就是 and 和 or 的特殊应用场景

    data = "alex"
    # 如果第一个值转换为布尔值为True,则 name = 第一个值
    # 如果第一个值转换为布尔值为False,则 name = 第二个值
    name = data or "武沛齐"
    print(name)
    练习题
    v1 = 1 or 2
    v2 = -1 or 3
    v3 = 0 or -1
    v4 = 0 or 100
    v5 = "" or 10
    v6 = "wupeiqi" or ""
    print(v1,v2,v3,v4,v5,v6)
    >>> 1 -1 -1 100 10 wupeiqi
    # 如果第一个值转换布尔值为True,则 num = 第二个值
    num = 1 and 2
    # 如果第一个值转换布尔值为False,则 num = 第一个值
    num = 0 and 9
    #练习题
    v1 = 4 and 8
    v2 = 0 and 6
    v3 = -1 and 88
    v4 = "" and 7
    v5 = "武沛齐" and ""
    v6 = "" and 0
    v7 = 0 and "中国"
    print(v1,v2,v3,v4,v5,v6,v7)
    >>> 8 0 88    0
    or, 看第一个值,如果是 `真` 则选择第一个值,否则选择第二个值。
    and,看第一个值,如果是 `假` 则选择第一个值,否则选择第二个值。

     

    3.6.1 not + and + or

    v1 = not 'alex'
    print(v1)    # False
    v2 = not ''
    print(v2)    # True
    0 or 4 and 3 or not 7 or 9 and 6
    0 or 4 and 3 or False or 9 and 6
    0 or 3 or False or 6
    3 or False or 6
    3

    ####

    4. 进制和编码

    4.1 进制

    • 二进制: 计算机底层都是二进制操作。 满2进1

    • 八进制: 满8进1

    • 十进制: 人的大脑都是十进制操作。满10进1

    • 十六进制: 满16进1

    • img

    • 强调: 在python中十进制是以整型方式存在,其他进制则是以字符串的形式存在。

    • image-20200712163735848

    • 二进制 & 十进制

      v1 = bin(12)   # 将十进制转换为二进制
      print(v1)      # >>> 0b1100
      
      v2 = int('0b1100',base = 2)   # 将二进制转换为十进制
      print(v2)                     # >>> 0b1100
    • 八进制 & 十进制

      v1 = oct(12)    # 将十进制转换为八进制
      print(v1)       # >>> 0o14
      v1 = int('0o14',base = 8)  # 将八进制转换为十进制
      print(v1)                  # >>> 12
    • 十六进制 & 十进制

      v1 = hex(12)     # 将十进制转换为十六进制
      print(v1)        # >>> 0xc
      v2 = int('0xc',base = 16)    # 将十六进制转换为十进制
      print(v2)                    # >>> 12

       

    4.2 计算机中的单位

    计算机底层本质上都是二进制操作,所有操作都是 0101010101

    • b (bit), 位

      100110  # >>> 6b  (6位二进制)
    • B(byte),字节

      8 位就是1个字节
      10001010      # 就是8位 = 8b = 1B = 1个字节
    • KB(Kilobyte),千字节

        1024个字节就是1千字节(1KB),即:  1 KB = 1024 B = 1024*8 b
    • M(Megabyte),兆

        1024个千字节就是1兆(1M),即:  1M = 1024 KB = 1024 * 1024 B = 1024 * 1024 * 8 b
    • G(Gigabyte),千兆

        1024个兆就是1千兆(1G),即:  1G = 1024 M = 1024 * 1024 KB = 1024 * 1024 * 1024 B = 1024 * 1024 * 1024 * 8 b
    • T(Terabyte),万亿字节

        1024个G就是1T

    做个小练习:假设1个汉字需要2个字节(2B=16位来表示,如:1000101011001100),那么1G流量可以通过网络传输多少汉字呢?(计算机传输本质上也是二进制)

    解答:     已知 1G = 1024 MB = 1024 * 1024 KB = 1024 * 1024 * 1024 B 且 2B表示一个汉字。    所以 1024 * 1024 * 1024 / 2 = 536870912,即:1G流量可以传输536870912个汉字。

     

    4.3 编码

    4.3.1 ascii编码

    只能表示英文信息,在其内部只有256种二进制和英文等信息的对应关系。

    4.3.2 Unicode(万国码)

    • ucs2: 在内部规定用2个字节来表示文字和二进制的对应关系。

      0000000000000000    ->>   xx
      (65536...)
      1111111111111111    ->>  xx
    • ucs4, 在内部规定用于4个字节来表示文字和二进制的对应关系

      00000000 00000000 00000000 00000000  ->> xx(0)
      ...(4294967295)
      11111111 11111111 11111111 11111111 ->> xx
    • unicode优点: 可以将全球的文字信息与二进制的对应全都包括。

    • unicode缺点: 太占用空间

    • 一情况下unicode不会直接用于数据传输,硬盘存储

    4.3.3 UTF-8编码

    对unicode中的二进制进行压缩,用尽可能少的位来表示数据。

    • 第一步:根据码位选择转换模板

        码位范围(十六进制)                转换模板   
        0000 ~ 007F                      0XXXXXXX   
        0080 ~ 07FF                   110XXXXX 10XXXXXX   
        0800 ~ FFFF                 1110XXXX 10XXXXXX 10XXXXXX  
        10000 ~ 10FFFF            11110XXX 10XXXXXX 10XXXXXX 10XXXXXX  
        例如:"B"  对应的unicode码位为 0042,那么他应该选择的一个模板。
              "ǣ"  对应的unicode码位为 01E3,则应该选择第二个模板。     
              "武" 对应的unicode码位为 6B66,则应该选择第三个模板。      
              "沛" 对应的unicode码位为 6C9B,则应该选择第三个模板。      
              "齐" 对应的unicode码位为 9F50,则应该选择第三个模板。      
       注意:一般中文都使用第三个模板(3个字节),这也就是平时大家说中文在utf-8中会占3个字节的原因了。
    • 第二步:码位以二进制展示,再根据模板进行转换

      码位拆分: "武"的码位为6B66,则二进制为 0110101101100110
      根据模板转换:    
      6    B    6    6    
      0110 1011 0110 0110    
      ----------------------------    
      1110XXXX 10XXXXXX 10XXXXXX    使用第三个模板    
      11100110 10XXXXXX 10XXXXXX 第一步:取二进制前四位0110填充到模板的第一个字节的xxxx位置  11100110 10101101 10XXXXXX 第二步:挨着向后取6位101101填充到模板的第二个字节的xxxxxx位置    
      11100110 10101101 10100110  第二步:再挨着向后取6位100110填充到模板的第三个字节的xxxxxx位置最终,"武"对应的utf-8编码为 
      11100110 10101101 10100110

    除了utf-8之外,其实还有一些其他的 utf-7/utf-16/utf-32 等编码,他们跟utf-8类似,但没有utf-8应用广泛。

    4.4 总结

    1. ascii只有256种对应关系。

    2. unicode(字节集)

      • ucs2

      • ucs4

    3. utf-8,对unicode进行加工压缩处理。

    5. 常见数据类型

    5.1 整型

    5.1.1 常见使用

    通过运算符或者前两对整型进行加减乘除等操作

    5.1.2 其他类型转换成整型

    • 字符串

      v1 = int('987',base=10)   ## 987
      v2 = int('0b11',base=2)
      v3 = int('0o11',base=8)
      v4 = int('0xc1',base=16)
    • 布尔值

      v1 = int(True)
      v2 = int(False)
      print(v1)  # 1
      print(v2)  # 0

    5.2 布尔类型

    内部只有True和False来表示布尔值

    5.2.1 某个特定值转换为布尔类型

    '' -> False   其他都是True
    0  -> False   其他都是True
    
    # 其他类型: 列表,字典,集合,元组

     

    5.3 浮点型

    常常在系统中出现的一些小数,例如: 3.14 0.96

    浮点型是一种小数一种非精确表现形式

    >>> 0.2 + 0.3
    0.5
    >>> 0.2 + 0.1
    0.30000000000000004

    在所有的编程语言中都存在这些问题。所以,在程序中如果遇到非精确的小数表示可以直接使用浮点型,如果精确的可以使用Python模块decimal模块

     

    5.4 补充

    1. 关于整型

    在Python2.x中只有两种整型: int/long
    在Python3.x中只有一种整型: int  无限制
    1. 关于浮点型

    在Python2.x中如果出现除法   9/2 = 4          ## 9.0 / 2 = 4.5
    在Python3.x中如果出现除法   9/2 = 4.5
    1. Python的默认解释器编码

    2. f格式化

    3. 输出

    py2:
        print "您好"
    py3:
        print('您好')
    1. 输入

    py2:
        v = raw_input('please ...')
    py3:
        v = input('please ...')

    7.5 字符串类型

    7.5.1 常见操作

    • 求字符串的长度

    name = 'alex'
    data = len(name)  # len('alex')
    print(date) # 4
    # 请用while循环输出一个字符串的每个字符
    content = '中华人民共和国'
    
    index = 0
    while index < len(content):
        print(content[index])
        index += 1
    
    • 索引

    name = 'alex'
    print(name[0])  #  'a'
    print(name[1])  #  'l'
    print(name[2])  #  'e'
    print(name[3])  #  'x'
    • 切片

      准则: 前取后不取

    content = '中华人民共和国'
    data1 = content[2:5]   # 人民共
    data2 = content[0:5]   # 中华人民共
    data3 = content[2:len(content)]    # 人民共和国
    data4 = content[:]     # 中华人民共和国
    
    data5 = content[2:-1]    # 人民共和    
    data6 = content[:-1]     # 中华人民共和

    7.5.2 字符串特有

    1. 开头

    name = 'alex'
    # 判断name是不是以'a'开头的
    if name[0] == 'a':
        print('yes')
    else:
        print('no')
        
        
    # 判断name是不是以'al'开头的
    if name[0:2] == 'al':
        print('yes')
        
    # 
    v1 = name.startswith('al')
    print(v1)  # True
    1. 结尾

      name = 'alex'
      v1 = name.endswith('x')   # True
      v2 = name.endswith('ex')  # True
    2. 变大小写

    # 大写 : .upper()
    name = 'alex'
    data = name.upper()
    print(data)      # ALEX
    
    # 变小写
    name = 'ALEX'
    data = name.lower()
    print(data)   # alex
    
    # 输入 验证码
    code = input('please input: ')
    
    data = code.upper()
    if data == 'ALEX':
        print('验证码输入正确')
    else:
        print('验证码输入错误')
    1. 是否可以是十进制数

    # 判断是否可以是十进制
    num = input('please input: ')
    
    print(num.isdecimal())   # True 
    print(num.isdigit())     # 替换
    1. 替换

    data = '你是个好人,但是好人不合适我'
    value = data.replace('好人','坏人')
    print(value)   # 你是个坏人,但是坏人不合适我
    # 让用户输入一段字符串,判断用户输入的内容是否包括'密码’。
    # 如果包含敏感词替换为'password'
    
    content = input('please')
    
    if '密码' in content:
        data = content.replace('密码','password')
        print(data)
    else:
        print(content)

     

    8. 总结

    • while循环

    • 运算符面试题

    • 字符串操作

    •  

     

  • 相关阅读:
    Git学习笔记06-版本回退
    python3+selenium入门07-元素等待
    [cerc2017J]Justified Jungle
    [codeforces126B]Password
    计算几何基础模板
    floyd路径记录
    [数据结构复习]层序建立二叉树
    [patl2-011]玩转二叉树
    [poj3348]Cows
    [poj3347]Kadj Squares
  • 原文地址:https://www.cnblogs.com/lxc123/p/13289929.html
Copyright © 2011-2022 走看看