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
-
-
强调: 在python中十进制是以整型方式存在,其他进制则是以字符串的形式存在。
-
-
二进制 & 十进制
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 总结
-
ascii只有256种对应关系。
-
unicode(字节集)
-
ucs2
-
ucs4
-
-
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 补充
-
关于整型
在Python2.x中只有两种整型: int/long 在Python3.x中只有一种整型: int 无限制
-
关于浮点型
在Python2.x中如果出现除法 9/2 = 4 ## 9.0 / 2 = 4.5 在Python3.x中如果出现除法 9/2 = 4.5
-
Python的默认解释器编码
-
f格式化
-
输出
py2: print "您好" py3: print('您好')
-
输入
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 字符串特有
-
开头
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
-
结尾
name = 'alex' v1 = name.endswith('x') # True v2 = name.endswith('ex') # True
-
变大小写
# 大写 : .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('验证码输入错误')
-
是否可以是十进制数
# 判断是否可以是十进制 num = input('please input: ') print(num.isdecimal()) # True print(num.isdigit()) # 替换
-
替换
data = '你是个好人,但是好人不合适我' value = data.replace('好人','坏人') print(value) # 你是个坏人,但是坏人不合适我
# 让用户输入一段字符串,判断用户输入的内容是否包括'密码’。 # 如果包含敏感词替换为'password' content = input('please') if '密码' in content: data = content.replace('密码','password') print(data) else: print(content)
8. 总结
-
while循环
-
运算符面试题
-
字符串操作
-