Datawhale Python打卡第二天

本文介绍了Python中的基本数据类型(整数、浮点数、布尔值等),运算符(算术、关系、赋值和逻辑运算),以及数学常量和运算,包括整除、模运算、优先级和特殊运算如一元运算符和math.ceil。还提到了浮点数的原理和误差处理。
摘要由CSDN通过智能技术生成

前言

课后练习

用户 - antinomies-cn - HydroOJicon-default.png?t=N7T8https://hydro.ac/d/datawhale_p2s/user/33011以下是笔记内容来源

http://【【数据类型和操作】 聪明办法学Python第二版】 https://www.bilibili.com/video/BV1Ju4y1B73m/?share_source=copy_web&vd_source=22d693ff997a6123e8fa5415fba9def0icon-default.png?t=N7T8http://【【数据类型和操作】 聪明办法学Python第二版】 https://www.bilibili.com/video/BV1Ju4y1B73m/?share_source=copy_web&vd_source=22d693ff997a6123e8fa5415fba9def0

总结

类型

  • 常用类型
  - 整数 Integer(int)

  - 浮点数 Float   (相当于C语言中的双精度浮点型)

    # 与int的主要区别不在于小数点,而是离散和连续,在人工智能有重要应用

  - 布尔值 Boolean(bool)

  - 类型 Type(是的,“类型”也是种类型!) 
  •      部分类型
print(type(2))           # int
print(type(2.2))         # float
print(type(2 < 2.2))     # bool (boolean)
print(type(type(42)))    # type 
print(type("2.2"))       # 字符str (string or text)
print(type([1,2,3]))     # 列表list
print(type((1,2,3)))     # 元组tuple
print(type({1,2}))       # 集合set
print(type({1:42}))      # 字典dict (dictionary or map)
print(type(2+3j))        # 复数complex  (complex number)
print(type(f))           # 函数function
print(type(math))        # 模块module

 常量

  • ‘常数’区别于‘变量’(将在下节课讲授),’常数‘的值是固定的、不可改变的

        # 如 x=1,y=2.5,z=True 等可以进行赋值运算的称为变量,1,e 等称为常量

Python 内置了一些常量
- True,用于表示 布尔 `真`
- False,用于表示 布尔 `假`
- None,代表 `空` ,用于空值

`math` 库中的一些数学常量
- pi,数学常数 Π = 3.141592...,精确到可用精度
- e,数学常数 e = 2.718281...,精确到可用精度
- tau,数学常数 τ = 6.283185...,精确到可用精度(其实它不常用)
- inf,浮点正无穷大,等价于 float('inf'),负无穷大使用 `-math.inf` 

运算符

  • 这是本节的重点,因为实际编写代码中这是应用最多相对复杂的部分(个人想法)
- 算术:`+`, `-`, `*`, `@`, `/`, `//`, `**`, `%`, `-`(负号)(一元算符), `+`(正号)(一元算符)

- 关系:`<`, `<=`, `>=`, `>`, `==`, `!=`

- 赋值: `+=`, `-=`, `*=`, `/=`, `//=`, `**=`, `%=`(简化)(如c+=1即c=c+1)

- 逻辑:`and`, `or`, `not`
赋值与等号  
  • 赋值,即把一个常量赋给一个变量,变量就相当于这个常量的名字,可以通过变量调取这个值
a=3
print("a")
3

     # "="即赋值运算符

  •  "=="才是实际常说的等号,用于判断等号两边的表达式是否相等,并返回"True""False" 
3==4
False
5>4==4>3
True
 整除(//)
‘/’得到的结果只会是浮点数,作用与实际的除法相同,如2/1=1.0,3/2=1.5
print(" 5/3  =", (5/3))
5/3  = 1.6666666666666667
‘//’得到的结果只会是整数,作用是整除,如5//2=2
print(" 5//3 =", ( 5//3))   5//3 = 1
print(" 2//3 =", ( 2//3))   2//3 = 0
print("-1//3 =", (-1//3))   -1//3 = -1
print("-4//3 =", (-4//3))   -4//3 = -2
 模运算(取余)(%)
  • `%` 代表模运算(取余),结果为商的余数
print(" 6%3 =", ( 6%3))  6%3=0
print(" 5%3 =", ( 5%3))  5%3=2
print(" 2%3 =", ( 2%3))  2%3=2
print(" 0%3 =", ( 0%3))  0%3=0
print("-4%3 =", (-4%3))  -4%3=2
print(" 3%0 =", ( 3%0))  ZeroDivisionError 

   Python“%”的原理

def mod(a, b):
  return a - (a//b)*b

    # 注意除法的除数 

Python中的除法有许多有趣的应用,学会自己探索感兴趣的内容是一个好的习惯(前提是有意义)

运算
print(3 * 2)  6
print(3 * "p2s")  p2sp2sp2s
print(3 + 2)  5
print("Data" + "whale")  Datawhale
print(3 + "p2s")   TypeError 

  # 一般不同数据类型之间不允许加减或乘除,“3*’p2s'”是一个特例

运算优先度

优先度是一个比较复杂的内容,需要循序渐进

http://from IPython.display import IFrame IFrame('https://docs.python.org/zh-cn/3.9/reference/expressions.html#operator-precedence', width=1300, height=600)http://from IPython.display import IFrame IFrame('https://docs.python.org/zh-cn/3.9/reference/expressions.html#operator-precedence', width=1300, height=600)icon-default.png?t=N7T8http://from IPython.display import IFrame IFrame('https://docs.python.org/zh-cn/3.9/reference/expressions.html#operator-precedence', width=1300, height=600)http://from IPython.display import IFrame IFrame('https://docs.python.org/zh-cn/3.9/reference/expressions.html#operator-precedence', width=1300, height=600)

  • 优先顺序

      每种运算符都有一个“优先度”

(“括号乘方开方乘除加减”的顺序能解决大部分情况,再了解一些常用运算符对于新手应该够用)

print(2+3*4)  # 14(不是 20)
print(5+4%3)  # 6(不是 0)
print(2**3*4) # 32(不是 4096)
  • 结合律 

      相同优先度的情况下,按从左向右的顺序

print(5-4-3)   # -2(不是 4)
print(4**3**2) # 262144(不是 4096)
  •  还是注意浮点误差
print(0.1 + 0.1 == 0.2)        # True
print(0.1 + 0.1 + 0.1 == 0.3)  # False!
print(0.1 + 0.1 + 0.1)         # 0.30000000000000004
print((0.1 + 0.1 + 0.1) - 0.3) # 5.551115123125783e-17
 短路运算
  •  逻辑运算下的特殊情况(节约算力,有时避免崩溃,你Python也不是莽夫)
def yes():
    return True

def no():
    return False

def crash():
    return 1/0 # 会崩溃!
print(no() and crash()) # 成功运行!
print(crash() and no()) # 崩溃了!
print (yes() and crash()) # 因为上一行崩溃了,所以这行不会被运行,就是运行也会因为短路求值崩溃
  •  当逻辑运算已经得到答案(如 False and()或 True or()时)运算式会提前结束

 我们换成 `or`,再来试试

print(yes() or crash()) # 成功运行
print(crash() or yes()) # 崩溃了
print(no() or crash())  # 因为上一行崩溃了,所以这行不会被运行,就是运行也会因为短路求值崩溃

补充

`type()` vs `isinstance()`

  type()

  很明显,优势在于一般情况下好用,方便,缺点在于当数据类型变多时要一一考虑,并一一匹配

def isNumber(x):
    return ((type(x) == int) or
            (type(x) == float)) 
print(isNumber(1), isNumber(1.1), isNumber(1+2j), isNumber("p2s"))
True True False False

 `isinstance()`

 比 `type()` 更具有 `稳健性(Robustness)` ,也就是覆盖范围更广
 这种做法更加符合 `面向对象编程` 中 `继承(inheritance)` 的思想

import numbers
def isNumber(x):
    return isinstance(x, numbers.Number) # 可以应对任何类型的数字
print(isNumber(1), isNumber(1.1), isNumber(1+2j), isNumber("p2s"))
True True True False

fmod

http://补充资料:注意 `%` 与 `math.fmod()` 的区别,详见:[Modulo operation](https://en.wikipedia.org/wiki/Modulo_operation)http://补充资料:注意 `%` 与 `math.fmod()` 的区别,详见:[Modulo operation](https://en.wikipedia.org/wiki/Modulo_operation)icon-default.png?t=N7T8http://补充资料:注意 `%` 与 `math.fmod()` 的区别,详见:[Modulo operation](https://en.wikipedia.org/wiki/Modulo_operation)http://补充资料:注意 `%` 与 `math.fmod()` 的区别,详见:[Modulo operation](https://en.wikipedia.org/wiki/Modulo_operation)

拓展

一元算符

Python中的一元运算符是指只需要一个操作数的运算符。一元运算符有 + (正数), - (负数), ~ (整数按位取反)和 not (布尔运算 非)。
例如,如果 a = 10,那么 +a 表示 10, -a 表示 -10, ~a 表示 -11, not a 表示 False。
一元加号和减号运算符的重要用途是什么?一元加号可以将其他类型的值转换为数字,一元减号可以将正数变为负数或反之。

 math.ceil

math — Mathematical functions — Python 3.12.0 documentationicon-default.png?t=N7T8https://docs.python.org/3/library/math.html?highlight=ceil#math.ceil

关于浮点数

(其实第一天已经有类似链接)

http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507icon-default.png?t=N7T8http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507http://关于浮点数的原理,误差,以及你想知道的一切 - 大可的文章 - 知乎 https://zhuanlan.zhihu.com/p/558723507

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值