当前位置: 首页 > article >正文

速通Python 第二节

一、动态类型特性

Python , 一个变量是什么类型 , 是可以在 " 程序运行 " 过程中发生变化的 . 这个特性称为 " 动态类型 "
a = 10
print(type(a))
a = 'hello'
print(type(a)

 在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str.

C++/Java 这样的语言则不允许这样的操作 . 一个变量定义后类型就是固定的了 . 这种特性则称为 "
态类型 ".
动态类型特性是一把双刃剑 .
对于中小型程序 , 可以大大的解约代码量 ( 比如写一段代码就可以同时支持多种类型 ).
对于大型程序 , 则提高了模块之间的交互成本 . ( 程序猿 A 提供的代码难以被 B 理解 )

二、注释

注释是一种特殊的代码 , 它不会影响到程序的执行 , 但是能够起到解释说明的作用 , 能够帮助程序猿们理解程序代码的执行逻辑
from turtle import *

speed(10)
# 外层大七巧板
fillcolor( 'green')  #蓝色三角
begin_fill()
left(45)
forward(400)
left(135)
forward(400*(2**(1/2)))
home()
end_fill()

fillcolor( 'blue')  #绿色三角
begin_fill()
left(135)
forward(400)
left(135)
forward(400*(2**(1/2)))
home()
end_fill()

fillcolor( 'yellow')  #黄色三角
begin_fill()
left(45)
forward(200)
right(135)
forward(200*(2**(1/2)))
home()
end_fill()

fillcolor( 'purple')  #紫色正方形
begin_fill()
right(45)
for i in range(4):
    forward(200)
    right(90)
home()
end_fill()

left(45)  #红色平行四边形
forward(400)
fillcolor( 'red')
begin_fill()
right(135)
forward(200*(2**(1/2)))
right(45)
forward(200)
right(135)
forward(200*(2**(1/2)))
end_fill()
home()

left(45)  #棕色三角
forward(400)
right(135)
fillcolor( 'brown')
forward(200*(2**(1/2)))
begin_fill()
forward(200*(2**(1/2)))
right(90)
forward(200*(2**(1/2)))
right(135)
forward(200)
end_fill()
home()

right(135)  #粉色三角
forward(400)
left(135)
fillcolor( 'pink')
begin_fill()
forward(200*(2**(1/2)))
left(135)
forward(200)
end_fill()
home()

如上,这是一个画七巧板的代码,注释帮助我们区分每个部分的代码。

注释的语法

Python 中有两种风格的注释 .

(1) 注释行

使用 # 开头的行都是注释 .
#注释的第一种方法

(2) 文档字符串

使用三引号引起来的称为 " 文档字
  • 可以包含多行内容,
  • 一般放在 文件/函数/类 的开头.
  • """ 或者 ''' 均可 (等价).
"""
文档字符串
文档字符串
"""
注释的要求
1. 内容准确 : 注释内容要和代码一致 , 匹配 , 并在代码修改时及时更新 .
2. 篇幅合理 : 注释既不应该太精简 , 也不应该长篇大论 .
3. 使用中文 : 中国一般都要求使用中文写注释 ,

三、输入输出

程序需要和用户进行交互.

用户把信息传递给程序的过程, 称为 "输入".

程序把结果展示给用户的过程, 称为 "输出".

输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串.

PyCharm 运行程序, 下方弹出的窗口就可以视为是控制台
输入输出的最常见方法是图形化界面 . 如我们平时用到的 QQ, 浏览器 , steam , 都不需要用户输入命令 , 而只是通过鼠标点击窗口点击按钮的方式来操作.
Python 当然也可以用来开发图形化界面的程序. 但是图形化程序开发本身是个课题,我们这里不做介绍。

1.通过控制台输出

Python通过print输出

我们可以用print输出一个字符串

print('hello')
它不仅能输出一个字符串 , 还可以输出一个其他类型的变量
a = 10
print(a)
b = True
print(b)
更多的时候 , 我们希望能够输出的内容是混合了字符串和变量的 .
例如 : 输出 num = 1000
这种情况我们要这么写
num = 1000
print(f'num = {num}')

注意 :
  • 使用 f 作为前缀的字符串, 称为 f-string
  • 里面可以使用 { } 来内嵌一个其他的变量/表达式

2.通过控制台输入

python 使用 input 函数 , 从控制台读取用户的输入 .
num = 0
num = input ( ' 请输入一个整数 : ' )
print ( f' 你输入的整数是 { num } ' )

注意 :
  • input 的参数相当于一个 "提示信息", 也可以没有.
  • input 的返回值就是用户输入的内容. 是字符串类型.

下面我们来看这个代码

a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
print(f'a + b = {a + b}')
我们来试试这个代码
此处的结果是字符串拼接, 不是算术运算. 如果要想进行算术运算, 需要先转换类型.
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
a = int(a)
b = int(b)
print(f'a + b = {a + b}')
通过 int( ) 把变量转成了 int 类型.
类似的, 使用 float( ), bool( ), str( ) 等可以完成对应的类型转换
代码示例 : 输入 4 个小数 , 4 个小数的平均值 .
a = input('请输入第一个数字: ')
b = input('请输入第二个数字: ')
c = input('请输入第三个数字: ')
d = input('请输入第四个数字: ')
a = float(a)
b = float(b)
c = float(c)
d = float(d)
avg = (a + b + c + d) / 4
print(f'平均值: {avg}')

四、运算符

1.算术运算符

+ - * / % ** // 这种进行算术运算的运算符 , 称为 算术运算符
注意 1 : / 中不能用 0 作为除数 . 否则会 抛出异常
print(10 / 0)

注意 2: 整数 / 整数 结果可能是小数 . 而不会截断
print(10 / 3)
注意 3: % 不是 " 百分数 ", 而是求余数
print(7 % 2)
注意 4: ** 是求乘方 . 不光能算整数次方 , 还能算小数次方
print(4 ** 2)
print(4 ** 0.5)
注意 5: // 是取整除法 ( 也叫地板除 ). 整数除以整数 , 结果还是整数 ( 舍弃小数部分 , 并向下取整 . 不是四舍五入)
print(7 // 2)
print(-7 // 2)

2.关系运算符

< <= > >= == != 这一系列的运算符称为 关系运算符 , 它们是在比较操作数之间的关系 .
其中
<= " 小于等于 "
>= " 大于等于 "
== " 等于 "
!= " 不等于 "
(1) 如果关系符合 , 则表达式返回 True. 如果关系不符合 , 则表达式返回 False
a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)
(2) 关系运算符不光针对整数 / 浮点数进行比较 , 还能针对字符串进行比较 .
a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)
注意 :
直接使用 == 或者 != 即可对字符串内容判定相等 . ( 这一点和 C / Java 不同 ).
字符串比较大小 , 规则是 " 字典序 "
关于字典序:
想象一个英文词典, 上面的单词都是按照字母顺序排列. 如果首个字母相同, 就比较第二个字母. (就
比如著名单词 abandon).
我们认为一个单词在词典上越靠前, 就越小. 越靠后, 就越大.
(3) 对于浮点数来说, 不要使用 == 判定相等.
print(0.1 + 0.2 == 0.3)
注意 : 浮点数在计算机中的表示并不是精确的 ! 在计算过程中 , 就容易出现非常小的误差 .
print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

 

可以看到 , 0.1 + 0.2 的结果并非是 0.3 , 而是带了个小尾巴 . 虽然这个尾巴非常小了 , 但是 == 是锱铢
必较的 , 仍然会导致 == 的结果为 False.
不止是 Python 如此, 主流编程语言都是如此. 这个是 IEEE754 标准规定的浮点数格式所引入的问
题. 此处我们不做过多讨论
正确的比较方式 : 不再严格比较相等了 , 而是判定差值小于允许的误差范围
a = 0.1 + 0.2
b = 0.3
print ( - 0.000001 < ( a - b ) < 0.000001 )
实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可

3.逻辑运算符

像 and or not 这一系列的运算符称为 逻辑运算符.
print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)
and 并且. 两侧操作数均为 True, 最终结果为 True. 否则为 False. (一假则假)
or 或者. 两侧操作数均为 False, 最终结果为 False. 否则为 True. (一真则真)
not 逻辑取反. 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.
此处说的 "并且" 和 "或者", 就是我们日常生活中使用的 "并且" 和 "或者".
想象一下未来丈母娘问你要彩礼, 什么叫做 "有房并且有车", 什么叫做 "有房或者有车" .
a = 10
b = 20
c = 30
print(a < b and b < c)
print(a < b and b > c)
print(a > b or b > c)
print(a < b or b > c)
print(not a < b)
print(not a > b)
一种特殊写法
a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同
关于短路求值
和其他编程语言类似 , Python 也存在短路求值的规则 .
  • 对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行.
  • 对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行.

4.赋值运算符

(1) = 的使用
= 表示赋值 . 这个我们已经用过很多次了 . 注意和 == 区分 .
= 除了基本的用法之外 , 还可以同时针对多个变量进行赋值 .
链式赋值
a = b = 10
多元赋值
a, b = 10, 20
代码实例 : 交换两个变量
基础写法
a = 10
b = 20
tmp = a
a = b
b = tmp
基于多元赋值
a = 10
b = 20
a, b = b, a
(2) 复合赋值运算符
Python 还有一些 复合赋值运算符 . 例如 += - = *= /= %=
其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理 .
a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)
注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符. Python 中则不支持这种运算. 如果需要使用, 则直接使用 += 1 或者 -= 1
++ -- 最大的问题就是容易分不清前置和后置的区别. 这一点 Python 语法在设计的时候就进行了
规避, 避免出现这种不直观, 并且容易混淆的语法.

除了上述之外 , Python 中还有一些运算符 , 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符 ( & | ~ ^ << >>) 等 . 此处咱们暂时不介绍.

http://www.kler.cn/a/448553.html

相关文章:

  • 【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》
  • jvm栈帧中的动态链接
  • LabVIEW深海气密采水器测控系统
  • HBase、Hive、Redis 和 MongoDB的对比
  • wireshark初认识
  • 写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践
  • redis数据转移
  • Linux快速入门-兼期末快速复习使用
  • redis——布隆过滤器
  • 271-基于XC7V690T的12路光纤PCIe接口卡
  • C++中如何实现序列化和反序列化?
  • PyTorch(GeForce GT 730) 环境搭建
  • 网络安全加密
  • 网络架构与IP技术:4K/IP演播室制作的关键支撑
  • 网络安全——对称加密与非对称加密
  • selenium 报错 invalid argument: invalid locator
  • 拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
  • 医疗服务品质提升:SSM 与 Vue 打造医院预约挂号系统方案
  • Next.js 13 App Router实战踩坑与性能优化指南
  • [react]redux异步处理和重写useDispatch
  • 第十六周做题总结_数据结构_AVL与哈希查找
  • 借助Aspose.Cells ,删除 Excel 中的空白行和列
  • Pika Labs技术浅析(四):数据可视化
  • 自建MD5解密平台
  • 设计模式 -- 单例模式
  • en3d 部署笔记