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

  • 运算符面试题

  • 字符串操作

  •  

 

原文地址:https://www.cnblogs.com/lxc123/p/13289929.html