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循环

    • 运算符面试题

    • 字符串操作

    •  

     

  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/lxc123/p/13289929.html
Copyright © 2011-2022 走看看