第三章:Python基础 & 运算符
3.1 内容回顾 & 补充
计算机基础
-
编码
字符串: "中国" "Hello"
字 符: 中 e
字 节:
unicode: 中 -> 4个字节, e -> 4个字节
utf-8 : 中 -> 3个字节, e -> 1个字节
位 : 01101111 -> 8位表示一个字节
unicode: 一般用于内存中的数据计算
utf-8 :一般用于网络传输及数据保存
- 安装解释器
- py2
- py3
- 语法
- print / input
- 整型 int / 字符串 str / 布尔值 boolen
- 条件语句
- and 运算符
- 变量
- 练习
# 练习题: 用户输入成绩,根据成绩的不同显示不同的级别,评分规则:A >=90; B >=80; C >=70; D 其他。
score = input("请输入成绩:")
score_int = int(score) # 如果不使用int强制转换,执行会报错 TypeError: '>=' not supported between instances of 'str' and 'int'
if score_int >= 90:
print("A")
elif score_int >= 80:
print("B")
elif score_int >= 70:
print("C")
else:
print("D")
-
补充
# 10086示例
message = """欢迎致电10086
1、话费查询
2、流量服务
3、业务办理
4、人工服务
"""
print(message) index = input("请输入你要选择的业务:")
index = int(index)
if index == 1:
print('话费查询')
elif index == 2:
print('流量服务')
elif index == 3:
content = """业务办理
1、修改密码
2、更改套餐
3、停机
"""
print(content)
value = input('请输入要办理的业务编号:')
value = int(value)
if value == 1:
print('修改密码')
elif value == 2:
print('更改套餐')
elif value == 3:
print('停机')
else:
print('错误')
elif index == 4:
print('人工服务')
else:
print('输入错误') pycharm 变更解释器
3.2 循环语句
1、循环打印 “ 人生苦短,我用Python ”
while True: # 没有终止循环条件,这叫死循环
print('人生苦短,我用Python')
2、while 后加条件
while 1 > 0:
print('人生苦短,我用Python')
while 1 > 0 and 2 > 1:
print('人生苦短,我用Python')
3、数字相加
"""
count = 1
value = count + 1
print(value)
"""
"""
count = 1
count = count + 1
print(count)
"""
4、请通过循环,让 count 每次循环都 +1
count = 1
while True:
print(count)
count = count + 1
count = 1
while True:
print(count)
count = count + 2
# 练习
while True: # 这个代码执行的结果就是永远打印1
count = 1
print(count)
count = count + 1
5、请通过循环,打印 1 2 3 ...10
count = 1
while count <= 10:
print(count)
count = count + 1
print("结束")
6、请通过循环,打印 1 2 3 4 5 6 8 9 10
# 错误示例
count = 1
while count <= 10 and count != 7:
print(count)
count = count + 1
#正确
count = 1
while count <= 6:
print(count)
count = count + 1
count = 8
while count <= 10:
print(count)
count = count + 1
#正确
count = 1
while count <= 10:
if count != 7:
print(count)
count = count + 1
#正确
count = 1
while count <= 10:
if count == 7:
pass
else:
print(count)
count = count + 1
7、关键字:break - 是终止当前循环
while True:
print(666)
break # 终止当前循环
print('结束')
# 练习:
# 通过 break 实现打印 1-10
count = 1
while True:
print(count)
if count == 10:
break
count = count + 1
print("结束")
# break 是终止当前循环
while True:
print('你好')
while True:
print(666)
break
break
8、关键字:continue
count = 1
while count <= 10:
print(count)
continue # 本次循环如果遇到 continue,则不再继续往下走,而是回到 while 条件位置
count = count + 1
#示例:1 2 3 4 5 6 8 9 10
count = 1
while count <= 10:
if count == 7:
continue
print(count) # 会打印1到6,但程序不会自动终止
count = count + 1
count = 1
while count <= 10:
if count == 7:
count = count + 1
continue
print(count)
count = count + 1
9、while else
count = 1
while count < 10:
print(count)
count = count + 1
else: #不再满足 while 后面的条件时,触发。 或 条件 = False
print("ELSE代码块")
print('结束')
count = 1
while True:
print(count)
if count == 10:
break
count = count + 1
else: # 不再满足 while 后面的条件时,触发。 或 条件 = False
print("ELSE代码块") # 这段代码中这行不会执行,因为条件不会为 False 时,break 已经终止了当前循环
print('结束')
10、while 循环代码执行顺序
11、其他
快速注释 Ctrl+?
-
pycharm 断点 (Debug 模式)
Debug 模式运行代码,Debug模式可以让你看见代码执行每一步都干了什么
12、总结
- while 基本结构
- break
- continue
- while else
3.3 字符串格式化
1、%s 占位符
name = input('姓名:')
do = input('在干什么:')
template = "%s在教室,%s。" % (name,do,)
print(template)
2、%d 占位符
template = "我是%s, 年龄%s, 职业%s" % ("alex",78,"讲鸡汤")
print(template)
template = "我是%s, 年龄%d, 职业%s" % ("alex",78,"讲鸡汤")
print(template)
3、%%
name = 'alex'
template = '%s现在手机的电量是100%%'%(name,) # 如果是 100% 会报错
print(template)
4、示例
name = input('请输入姓名:')
age = input('请输入年龄:')
job = input('请输入职业:')
hobby = input('请输入爱好:')
msg = """
------------ info od Alex ------------
Name : %s
Age : %s
Job : %s
Hobby : %s
------------ end ------------"""
#print(msg%(name,age,job,hobby))
data = msg % (name,age,job,hobby)
print(data)
3.4 运算符
3.4.1 算数运算
以下假设变量 a=2, b=3
运算符 | 描述 | 示例 |
---|---|---|
+ | 加——>两个对象相加 | a+b=5 |
- | 减——>两个数相减 | a-b=-1 |
* | 乘——>两个数相乘或是返回一个被重复若干次的字符串 | a*b=6 |
/ | 除——>x除以y | b/a=1.5 |
% | 取模——>返回除法的余数 | b%a=1 |
** | 幂——>返回x的y次幂 | b**a=9 |
// | 取整除——>返回商的整数部分 | b//a=1 , 如果是3.0//2.0=1.0 |
- 加 +
a = 10
b = 20
print(a + b) # 结果为 30
- 减 -
a = 10
b = 20
print(a - b) # 结果为 -10
- 乘 *
a = 10
b = 20
print(a * b) # 结果为 200
- 除 /
a = 10
b = 20
print(a / b) # 结果为 0.2
- 取模 %
value = 11 % 3
print(value) # 结果为 2
- 幂 **
a = 10
b = 20
print(a ** b) # 结果为 100000000000000000000
val = 2**8
print(val) # 结果为 256
- 取整除 //
val = 9/2
print(val) # 结果为 4.5
c = 9
d = 2
print(c // d) # 结果为4, 9.0//2.0输出结果为4.0
练习:
#练习题:打印 1 - 100 之间的奇数
count = 1
while count <= 100:
val = count % 2
if val == 1:
print(count)
count = count + 1
#练习题:打印 1 - 100 之间所有的数相加
total = 0
count = 1
while count <= 100:
total = total + count
count = count + 1
print(total)
#练习题:打印 1 - 2 + 3 -4 + 5...+ 99 - 100 的结果
total = 0
count = 1
while count <= 100:
if count % 2 == 1:
total = total + count
else:
total = total - count
count = count + 1
print(total)
3.4.2 比较运算
以下假设变量 a=10 , b=20
运算符 | 描述 | 示例 |
---|---|---|
== | 等于——>比较对象是否相等 | (a==b) 返回 False |
!= | 不等于——>比较对象是否不相等 | (a!=b) 返回 True |
> | 大于——>返回 x 是否大于 y | (a>b) 返回 False |
< | 小于——>返回 x 是否小于 y, | (a<b) 返回 True |
>= | 大于等于——>返回 x 是否大于等于 y | (a>=b) 返回 False |
<= | 小于等于——>返回 x 是否小于等于 y | (a<=b) 返回 True |
3.4.3 赋值运算
以下假设变量 a=10 , b=20
运算符 | 描述 | 示例 |
---|---|---|
= | 简单的赋值运算符 | c=a+b 将 a+b 的运算结果赋值为c |
+= | 加法赋值运算符 | c+=a 等效于 c= c+a |
-= | 减法赋值运算符 | c-=a 等效于 c=c-a |
*= | 乘法赋值运算符 | c*=a 等效于 c=c*a |
/= | 除法赋值运算符 | c/=a 等效于 c=c/a |
%= | 取模赋值运算符 | c%=a 等效于 c=c%=a |
**= | 幂赋值运算符 | c**=a 等效于 c=c**a |
//= | 取整除赋值运算符 | c//=a 等效于 c=c//a |
练习:
count = 1
while count <= 100:
print(count)
count += 1 # 等效于 count = count + 1
3.4.4 逻辑运算
运算符 | 描述 | 示例 |
---|---|---|
and | 布尔‘与’ 如果a为False,a and b返回False,否则它返回 b 的计算值 | (a and b) 返回 False |
or | 布尔‘或’ 如果a为True,它返回True,否则它返回b的计算值 | (a or b) 返回 True |
not | 布尔‘非’ 如果a为True,它返回False,如果a为False,它返回True | not(a and b) 返回 True |
1、一般情况下的使用:
if 1 > 0 and 1 < 2:
print(666)
if 1 > 0 and 1 > 2:
print(777)
if 1 > 0 or 1 > 2:
print(888)
if not 1 > 0 or 1 > 2:
print(999)
2、二般情况下的使用:
小知识:
- int
- str
- bool
#数字转字符串
v1 = 666
v2 = str(v1)
print(v2) # "666"
#字符串转数字
v1 = "666"
v2 = int(v1)
print(v2) # 666
#数字转布尔值
v1 = 1
v2 = bool(v1)
print(v2) # True
v1 = 0
v2 = bool(v1)
print(v2) # False
#字符串转布尔值
v1 = "1"
v2 = bool(v1)
print(v2) # True
v1 = "0"
v2 = bool(v1)
print(v2) # True
v1 = " "
v2 = bool(v1)
print(v2) # True
v1 = "" # 表示空字符串
v2 = bool(v1)
print(v2) # Flase
#布尔值转换其他
v1 = True
v2 = int(v1)
print(v2) # 1
v1 = False
v2 = int(v1)
print(v2) # 0
v1 = True
v2 = str(v1)
print(v2) # True
v1 = False
v2 = str(v1)
print(v2) # False
3、转换需要记住的:
字符串转数字
数字转字符串
-
"" / 0 转换布尔值之后是 False
4、经典面试题
对于 or :
value = 1 or 9
第一个值转换成布尔值如果是真,则 value = 第一个值。
第一个值转换成布尔值如果是假,则 value = 第二个值。
如果有多个 or 条件,则从左到右依次进行上述流程。
示例:
v1 = 0 or 1
v2 = 8 or 10
v3 = 0 or 9 or 8
#示例:
value = 0 or 9
print(value) # 结果为 9
value = 0 or 0
print(value) # 结果为 0
value = 0 or ""
print('--->',value,'<---') # 结果为 ---> <---
value = 0 or 9 or 8
print(value) # 结果为 9
#对于 and :
如果第一个值转换成布尔值是True,则 value = 第二个值。
如果第一个值转换成布尔值是False,则 value = 第一个值。
如果有多个 and 条件,则从左到右依次进行上述流程。
#示例:
v1 = 1 and 9
print(v1) # 结果为 9
v1 = 1 and 0
print(v1) # 结果为 0
v1 = 0 and 7
print(v1) # 结果为 0
v1 = 0 and ""
print(v1) # 结果为 0
v1 = 1 and 0 and 9
print(v1) # 结果为 0
#and 和 or 综合 : 先看 and 再看 or (前提是在没有括号的情况下)
#示例:
v1 = 1 and 9 or 0 and 6
print(v1) # 结果为 9
5、逻辑运算的优先级:
在没有 () 的情况下 not 的优先级高于 and , and 的优先级高于 or ,即优先级关系为 ()>not>and>or,同一优先级从左往右计算。
3.4.5 成员运算
运算符 | 描述 | 示例 |
---|---|---|
in | 如果在指定的序列中找到值返回True,否则返回False | x 在 y 的序列中,如果x在y的序列中返回True |
not in | 如果在指定的序列中没有找到值返回True,否则返回False | x 不在 y 的序列中,如果x不在y的序列中返回True |
- in
value = "我是中国人"
#判断‘中国’是否在 value 所代指的字符串中。 或者说 ‘中国’是否是 value 所代指的字符串的子序列。
v1 = "中国" in value
#示例
content = input('请输入内容:')
if "退钱" in content:
print('包含敏感字符!')
#示例
while True:
content = input('请输入内容:')
if "退钱" in content:
print('包含敏感字符')
else:
print(content)
break
- not in
value = "我是中国人"
#判断‘北京’是否不在 value 所代指的字符串中。 或者说 ‘北京’是否不是 value 所代指的字符串的子序列。
v1 = "北京" not in value
3.4.6 身份运算
运算符 | 描述 | 示例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y,如果 id(x) 等于 id(y),is 返回结果 1 |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y,如果 id(x) 不等于 id(y),is not 返回结果 1 |
a = 20
b = 20
print(id(a)) # 打印对象id值
print(id(b))
if a is b:
print('1 - a 和 b 有相同的标识')
else:
print('1 - a 和 b 没有相同的标识')
if a is not b:
print('2 - a 和 b 没有相同的标识')
else:
print('2 - a 和 b 有相同的标识')
#修改 b 的变量
b = 30
if a is b:
print('3 - a 和 b 有相同的标识')
else:
print('3 - a 和 b 没有相同的标识')
if a is not b:
print('4 - a 和 b 没有相同的标识')
else:
print('4 - a 和 b 有相同的标识')
以上示例输出结果:
1543007904
1543007904
1 - a 和 b 有相同的标识
2 - a 和 b 有相同的标识
3 - a 和 b 没有相同的标识
4 - a 和 b 没有相同的标识
#is 和 == 的区别 后面学到列表时会学习
#is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。
a = [1,2,3]
b = a
print(b is a) # True
print(b == a) # True
b = a[:]
print(b is a) # False
print(b == a) # True
3.4.7 位运算
运算符 | 描述 | 示例 |
---|---|---|
& | 按位与运算符 | (a & b) 输出结果 12,二进制解释: 0000 1100 |
| | 按位或运算符 | (a | b) 输出结果 61,二进制解释: 0011 1101 |
^ | 按位异或运算符 | (a ^ b) 输出结果 49,二进制解释: 0011 0001 |
~ | 按位取反运算符 | (~a)输出结果 -61, 二进制解释: 1100 0011 ,在一个有符号二进制数的补码形式 |
<< | 左移动运算符 | a << 2 输出结果 240,二进制解释:1111 0000 |
>> | 右移动运算符 | a >> 2 输出结果 15,二进制解释: 0000 1111 |
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b; # 12 = 0000 1100
print("1 - c 的值为: %s"% c)
c = a | b; # 61 = 0011 1101
print("2 - c 的值为: %s"% c)
c = a ^ b; # 49 = 0011 0001
print("3 - c 的值为: %s"% c)
c = ~a; # -61 = 1100 0011
print("4 - c 的值为: %s"% c)
c = a << 2; # 240 = 1111 0000
print("5 - c 的值为: %s"% c)
c = a >> 2; # 15 = 0000 1111
print("6 - c 的值为: %s"% c)
以上示例输出结果:
1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15
3.4.8 运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
3.5 编码补充
-
编码扩展
ascii
-
unicode
- ecs2 — Unicode 通过2个字节来表示,这样表示的内容不够多
- ecs4 — Unicode 通过4个字节来表示,现在基本上都是这种
utf-8 — 全球通用,中文用3字节。
-
utf-16
在Windows系统使用记事本写完数据后,点击文件-另存为,弹框中点击编码后的选择按钮,有个Unicode的选项,这个指的就是utf-16,因为Unicode不能写在硬盘上。
-
gbk2312 ,中文用2字节。
由**制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式。
-
gbk ,中文用2字节。
gbk2312的升级版,又称GBK大字符集,简而言之就是将所有亚洲文字的双字节字符,包括简体中文,繁体中文,日语,韩语等 。
单位转化
8bit = 1byte
1024byte = 1kb
1024kb = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024PB = 1EB
1024EB = 1ZB
1024ZB = 1YB
1024YB = 1NB
1024NB = 1DB
常用到 TB 就够了
有不足之处欢迎各位评论指正!