python第三周学习记录,从零开始的python程序学习。

179 阅读8分钟

开篇

本周内容会从数学角度,讲讲坚持学习的价值。一年365天每天进步1%,一年之后会进步多少呢。

一年365天,每天退步1%,一年之后还剩下多少呢。

如果三天打鱼两天晒网,或者双休日退步1%呢,让我们一起开始这周的学习吧,学习之前先复习一下前两周的内容。

一二周内容复习

python基本语法元素

  • 缩进、注释、命名、变量、保留字
  • 数据类型、字符串、整数、浮点数、列表
  • 赋值语句、分支语句、函数
  • input()print()eval()print()格式化

保留字默写:import, as, from, if, elif, else, and, or, not, def, return, for, break, continue, try, while, is, in, True, False, None, with, yeild, pass, async, await

未写出: raise, global, nonlocal, assert, except, finally, class, lambda, del

温度转换实例

见python学习第一周文章 python第一周学习记录,从零开始的python程序学习

python基本图形绘制

  • 海龟绘图体系,import保留字用法
  • penup()pendown()pensize()pencolor()
  • fd()circle()seth()
  • 循环语句:for和inrange()函数

绘制蟒蛇

见python学习第二篇文章 python学习第二周,从零开始的python程序学习

第三周内容

数字类型及操作

整数类型

与数学中整数概念一致,可正可负,可用十进制,二进制(以0b或0B开头),八进制(以0o或0O开头)。十六进制(以0x或0X开头)表示。

整数无限制 pow(x, y)函数,计算x的y次方

浮点数类型

与数学中实数的概念一致。

  • 带有小数点及小数的数字
  • 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
  • 取值范围数量级约-10的307次方至10的308次方,精度数量级10的-16次方
  • 浮点数间运算存在不确定尾数,例如0.1 + 0.2 最终得出 0.30000000000000004,js中也有类似的问题,python中导致存在尾数的原因是计算机通过二进制表示小数,只能无限接近,但不完全相同。一般处理方式是round(a+b,1),结果保留一位小数。
  • round(x, d)对x四舍五入,d是小鼠截取位数。不确定尾数一般发生在10的-16次方左右,round()可以避免尾数问题。
  • 浮点数采用科学计数法表示:使用字母e或E作为幂的符号,以10为基数,格式如下: <a>e<b> 表示 a*10的b次方

复数类型

与数学中复数的概念一致: a + bj,a是实部,b是虚部

数值运算操作符

  • x + y 加,x与y之和
  • x - y减,x与y之差
  • x * y 乘,x与y之积
  • x / y 除,x与y之商 10 / 3结果是3.333333333333335
  • x // y 整数除,x与y之整数商 10 // 3 结果是3
  • + x x本身
  • - y x的负值(这个有点没理解描述是啥意思,等下再去看下课)
  • x % y 余数,模运算10 % 3结果是1
  • x ** y 幂运算,x的y次幂,当y是小数时,开方运算
  • 整数 -> 浮点数 -> 复数 存在一种逐渐扩展或变宽的关系,例如 123 + 4.0 = 127.0(整数+浮点数=浮点数)

数值运算函数

  • abs(x) 绝对值,x的绝对值abs(-10.01)结果为10.01
  • divmod(x, y) 商余,(x // y, x % y)同时输出商和余数 divmod(10, 3)结果是 (3, 1)
  • pow(x, y[, z]) 幂余,(x ** y) % z[..]表示参数z可以省略 pow(3, pow(3, 99), 10000)结果为 4587
  • round(x[, d]) 四舍五入,d是保留小数位数,默认值为0,round(-10.123, 2)结果为-10.12
  • max(X1, X2, ..., Xn) 最大值,返回X1, X2, ..., Xn中的最大值
  • min(X1, X2, ..., Xn) 最小值,返回X1, X2, ..., Xn中的最小值
  • int(x) 将x变成整数,舍弃小数部分 int(123.45)结果为123 int("123")结果为123
  • float(x) 将x变成浮点数,增加小数部分 float(12)结果为12.0,float("1.23")结果为1.23
  • complex(x) 将x变成复数,增加虚数部分,complex(4)结果为 4 + 0j

天天向上的力量

千分之一的力量

  • 一年365天,每天进步千分之一,一年累计进步了多少呢? 1.001^365
  • 一年365天,每天退步千分之一,累计剩下多少呢? 0.999^365
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))

image.png 每天向上0.001坚持365天,与向下0.001持续365天相比,相差接近两倍。

千分之五和1%的力量

  • 一年365天,每天进步千分之五或1%,累计进步多少呢?1.005^365 1.01^365
  • 一年365天,每天退步千分之五或1%,累计剩下多少呢?0.995^365 0.99^365
dayfactor = 0.005 # 改变为 0.01运行第二次
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))

image.png 1.005^365 = 6.17 千分之五的力量 0.995^365 = 0.16 image.png 1.01^365 = 37.78 1%的力量 0.99^365 = 0.03

工作日的力量

  • 一年365天,一周5个工作日,每天进步1%
  • 一年365天,一周两个休息日,每天退步1%
dayup = 1
for i in range(365):
    if i % 7 in [6, 0]:
        dayup = dayup * (1- 0.01)
    else:
        dayup = dayup * (1 + 0.01)
print("工作日努力,周末放松:{:.2f}".format(dayup))

image.png

周末不进步,工作日需要多少努力才能追上每一天都进步1%的人呢

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.01
print("工作日的努力参数是:{:.2f}".format(dayfactor))

image.png 结论:对比每天都进步1%的人,周末不进步的话,需要工作日加倍努力才能追上。

字符串类型及操作

字符串类型的表示

  • 字符串由一对单引号或一对双引号表示,'hello world'"hello world"
  • 字符串是有序序列,可以对其中字符进行索引 "h""hello world"中的第0个字符
  • ''' hello world ''',双三单引号或三双引号也可以表示字符串,可表示多行字符串。

image.png 使用[]获取字符串中一个或多个字符

numStr = "零一二三四五六七八九十"

索引:返回字符串中单个字符 <字符串>[M]

"零一二三四五六七八九十"[0]numStr[-1]

切片:返回字符串中一段字符字串 <字符串>[M: N : K],M缺失表示从开头开始,N缺失表示到结尾,K是步长,根据K步长对字符串切片

"零一二三四五六七八九十"[1: 3]numStr[0: -1]

零一二三四五六七八九十[:3]结果是"零一二"

零一二三四五六七八九十[::-1]结果是"十九八七六五四三二一零"

零一二三四五六七八九十[1: 8: 2]结果是"一三五七"

字符串操作符

操作符及使用描述
x + y连接两个字符串x,y
n * x 或 x * n复制n次方字符串x
x in s如果x是s的字串,返回True,否则返回False
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos: pos+3])

此程序在你输入1-7的数字时,会返回对应的星期几。

字符串处理函数

函数及使用描述
len(x)长度,返回字符串x的长度
str(x)任意类型x所对应的字符串形式 str([1,2]) => "[1, 2]"
hex(x)或oct(x)整数x的十六进制或八进制小写形式字符串 hex(425) = > "0x1a9"
chr(u)u为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码

从0-1114111(0x10FFFF)空间 每个编码对应一个字符 python字符串中每个字符都是Unicode编码字符

字符串处理方法

方法及使用描述
str.lower()或str.upper()返回字符串的全部字符小写/大写
str.split(sep=None)返回一个列表,"A, B, C".split(",") => ['A', 'B', 'C']
str.count(sub)返回子串sub在str中出现的次数 "an apple a day".count("a") => 4
str.replace(old, new)返回old字串被替换为new,"python".replace("n","n hello") => "python hello"
str.center(width[, fillchar])字符串根据宽度width居中,fillchar可选,"python".center(10, "=") => "==python=="
str.strip(chars)从str中去掉左侧和右侧chars中列出的字符,"= python =".strip(" =np") => "ytho"
str.join(iter)",".join("12345") => "1,2,3,4,5" 用于字符串分隔

字符串类型的格式化

  • 字符串格式化使用.format()方法,<模板字符串>.format(<都好分隔的参数>)
  • image.png

image.png

8.1日更新 后续内容以下两个标题

time库的使用

时间获取:time() , ctime() , gmtime()

  • time() 获取当前时间戳,计算机内部时间值,浮点数,time.time()
  • ctime() 获取当前时间并以易读方式表示,返回字符串,time.ctime()
  • gmtime() 获取当前时间,表示为计算机可处理时间格式,time.gmtime()

时间格式化:strftime() , strptime()

  • strftime(tpl, ts) tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量,
t=time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t) # "2024-08-01 12:44:00"

image.png

  • strptime(str, tpl) str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果,
timeStr = '2024-08-01 12:55:00'
time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")

程序计时:sleep() , perf_counter()

  • perf_counter() 返回CPU级别的精确时间计数值,单位为秒,由于这个技术起点不确定,连续调用差值才有意义
  • sleep(s) s拟休眠的时间,单位为秒,可以是浮点数,程序等待s秒后退出

文本进度条

image.png