python的基本数据类型与天天向上的力量--python-3-days

python 数字类型及数值操作

- 整数类型的无限范围及4种进制表示
- 浮点数类型的近似无限范围、小尾数及科学计数法
- +-*///%**、二元增强赋值操作符
- abs()divmod()pow()round()max()min()
- int()float()complex()

数字类型

整数类型

  1. 整数无限制 pow()
    可正可负,没有取值范围限制
  • pow(x,y)函数:计算 xy,想算多大算多大
>>> pow(2,100)
1267650600228229401496703205376
>>> pow(2,pow(2,15))
1415461031044954789001553……
  1. 四种进制表示
  • 十进制:1010, 99, -217
  • 二进制,以0b或0B开头:0b010, -0B101
  • 八进制,以0o或0O开头:0o123, -0O456
  • 十六进制,以0x或0X开头:0x9a, -0X89

浮点数类型

  1. 取值范围和精度基本无限制
  • 带有小数点及小数的数字
  • 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
  • 取值范围数量级约-10307至10308,精度数量级10-16
  1. 运算存在不确定尾数,round()
>>> 0.1 + 0.3
0.4
>>> 0.1 + 0.2
0.30000000000000004
>>> 0.1 + 0.2 == 0.3
False
>>> round(0.1+0.2, 1) == 0.3
True
0.1
0.00011001100110011001100110011001100110011001100110011010 (二进制表示)
53位二进制表示小数部分,约10-16
0.1000000000000000055511151231257827021181583404541015625 (十进制表示)
0.1 + 0.2
二进制表示小数,可以无限接近,但不完全相同
结果无限接近0.3,但可能存在尾数
  • round(x, d):对x四舍五入,d是小数截取位数
  • 浮点数间运算与比较用round()函数辅助
  • 不确定尾数一般发生在10-16左右,round()十分有效
  1. 采用科学计数法表示
  • 使用字母e或E作为幂的符号,以10为基数,格式如下:
aeb 表示 a*10b
4.3e-3 值为0.0043
9.6E5 值为960000.0

复数类型

z = 1.23e-4 + 5.6e+89j

  • 实部是什么? z.real 获得实部
  • 虚部是什么? z.imag 获得虚部

数值运算操作符

操作符是完成运算的一种符号体系

  1. 操作符是完成运算的一种符号体系
    python的基本数据类型与天天向上的力量--python-3-days_第1张图片
  2. 二元操作符有对应的增强赋值操作符
    python的基本数据类型与天天向上的力量--python-3-days_第2张图片

数字类型关系

类型间可进行混合运算,生成结果为"最宽"类型

  • 三种类型存在一种逐渐"扩展"或"变宽"的关系:
    整数 -> 浮点数 -> 复数
  • 例如:123 + 4.0 = 127.0 (整数+浮点数 = 浮点数)

数值运算函数

一些以函数形式提供的数值运算功能
python的基本数据类型与天天向上的力量--python-3-days_第3张图片
python的基本数据类型与天天向上的力量--python-3-days_第4张图片
python的基本数据类型与天天向上的力量--python-3-days_第5张图片

天天向上的代码

问题1:1‰的力量

  • 一年365天,每天进步1‰,累计进步多少呢?
    1.001365
  • 一年365天,每天退步1‰,累计剩下多少呢?
    0.999365
#DayUp01.py
#1/1000
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
>>> (运行结果)
向上:1.44,向下:0.69

问题2: 5‰和1%的力量

  • 一年365天,每天进步5‰或1%,累计进步多少呢?
  • 一年365天,每天退步5‰或1%,累计剩下多少呢?

使用变量的好处:一处修改即可

#DayDay02.py
#5/1000
#变量
dayfactor = 0.005
dayup = pow(1 + dayfactor,365)
daydown = pow(1 - dayfactor,365)
print("向上:{:.2f},向下:{:.2f}"".format(dayup,daydown))
>>> (5‰运行结果)
向上:6.17,向下:0.16
>>> (1%运行结果)
向上:37.78,向下:0.03

问题3: 工作日的力量

  • 一年365天,一周5个工作日,每天进步1%
  • 一年365天,一周2个休息日,每天退步1%
  • 这种工作日的力量,如何呢?
1.01**365 (数学思维)for..in.. (计算思维)
采用循环模拟365天的过程
抽象 + 自动化
#DayDayUp03.py
#工作日进步1%,周末休息下降1%
dayup = 1.0
dayfactor = 0.01
for i in range(365):
    if i % 7 in [6,0]:
        dayup = dayup*(1 - dayfactor)
    else :
        dayup = dayup*(1 + dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
>>> (运行结果)
工作日的力量:4.63

问题4: 工作日的努力

  • 工作日模式要努力到什么水平,才能与每天努力1%一样?
  • A君: 一年365天,每天进步1%,不停歇
  • B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
for..in.. (计算思维)def..while.. ("笨办法"试错)

python的基本数据类型与天天向上的力量--python-3-days_第6张图片

#DayDayUp04.py
def dayup(df):
    dayup = 1
    for i in range(365):
        if i % 7 in [6,0]:
            dayup = dayup*(1 - 0.01)
        else:
            dayup = dayup*(1 + df)
    return dayup
dayfactor = 0.01
while dayup(dayfactor) < 37.78:
    dayfactor += 0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
>>> (运行结果)
工作日的努力参数是:0.019
  • 根据df参数计算工作日力量的函数,参数不同,这段代码可共用,def保留字用于定义函数
  • while保留字判断条件是否成立,条件成立时循环执行

运行过程遇到的问题

SyntaxError: Non-UTF-8 code starting with '\xc1' in file C:\...\xxx.py on line 8, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

导致出错的根源就是编码问题。

解决方案是:
在程序最上面加上:

# coding=gbk

举一反三

  • 实例虽然仅包含8-12行代码,但包含很多语法元素
  • 条件循环、计数循环、分支、函数、计算思维
  • 清楚理解这些代码能够快速入门Python语言

问题变化

  • 工作日模式中,如果休息日不下降呢?
  • 如果努力每天提高1%,休息时每天下降1‰呢?
  • 如果工作3天休息1天呢?
  • "三天打鱼,两天晒网"呢?
  • "多一份努力"呢? (努力比下降多一点儿)
  • "多一点懈怠"呢?(下降比努力多一点儿)

你可能感兴趣的:(python-100天学习计划,python)