Python学习 之三 Python基础&运算符

陌路散爱 提交于 2019-11-28 19:17:53

第三章: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 就够了

有不足之处欢迎各位评论指正!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!