课程简述+趣闻+练习解析

· · 个人记录

3.2 练习 绘制太阳花 代码示例

Python尚进课堂 第二节

主题

0x789   0o237    'hello luogu!'     1e9+7   [1, 1, 4, 5, 1, 4]
1e-10   {}  []  5+1j

数值类型依次为:

int int str float list float dict(set) list complex

列表和字典的区别:

['这个',['l','i','s','t'],'还蛮大的','放','都可以放','没关系的',233]
{'2un':'touhou','爱手艺':' Cthulhu','idoit':'⑨'} 

浮点误差|浮点范围

float占用的内存空间是固定的,表示范围、精度也是有限的。

import sys
print(sys.float_info.max) # min 浮点范围
print(sys.float_info.epsilon)

eps = 1e-13 # 表示误差error
print(1.1 + 2.2 == 3.3) # False
print(abs(3.3 - (1.1 + 2.2) < eps) # True

浮点数比较的正确食用方法:使用误差 eps 和 绝对值 abs

数值运算

优先级从高到低,同级从左到右。

特例:

赋值号(单等号):先计算右边的值,然后赋给左边的变量。(左边一定是变量a = b = c = 3

乘方号 举栗子: 2^{3^{3^{3^{3^{3^3}}}}} 这是一个指数塔。

如果从左往右计算 即为 (((((2^3)^3)^3)^3)^3)^3 也就是 2^{3*3*3*3*3*3} 。显然 3*3*3*3*3*3 < 3^{3^{3^{3^{3^3}}}},完全不是一回事。

可知指数塔从右往左计算是数学规定的,python只负责实现罢了。a = 2**3**3**3**3**3**3

练习

小z的疑惑

当循环次数不确定时选while循环 整数还是浮点? 浮点数的比较方式? [代码示例](https://www.luogu.com.cn/paste/f5iraczm) #### 计算器 > eval() 代码示例: ```python print(eval(input())) ``` ## 字符串 同样的混个脸熟吧 ```python 'happy sugar life' "Coin Collecting Foundation' "中二电视台观众:\n台长你"新十万三"到底什么时候能更?" """"-'-test"-'""" ``` 以上依次为 合法,不合法,不合法,合法字符串。 ~~你说这个这谁懂啊啊~~ 可知字符串至少两边要有成对引号。 ~~你这不是废话~~ ### 引号 ```python '单引号字符串可以有"双引号"' "双引号字符串可以有'单引号'" '''三引号换行 '单'"双"引号都没问题''' ``` 建议一律三引号,以上。 ### 转义字符 ~~有三引号就不需要了~~ 但是选填可能会考你。所以………至少记下 >反斜杠\ > >\n回车 ### 索引、切片、步长 内置函数 $len()$ 返回字符串长度,设 $length$ 为字符串长 $a[k]$ 访问第 $k+1 $个字符 $(0\leq k < length) a[-s]$ 访问倒数第 $s$ 个字符 $(0 < s \leq length) ### ASCII编码 $ord('0') = 48$ 返回单字符的编码 $chr(48) = '0'$ 返回编码对应字符 128号:0-127 那么为什么是128? 0-9 10个, a-z 26个, A-Z 26个, $10+26+26=62$个字符 再加逗号、句号、叹号、问号……成功超过了64个,也就就是说 6bit 不够编,便采取 7bit 编排,这下够了还空出了前面几个,便发挥脑洞随便填填 ,所以才会有看起来开头有点奇怪的 ASCII 表。 ### 字典序 两个字符串比较 $A < B$ 返回什么呢?毫无疑问是bool类型: True/False 答案是False 0 模拟带入一次试试看~ ```python A = 'reimu marisa aya sanae cirno mystia' B = 'reimu marisa aya sanae cirno marisa' C = 'reimu marisa aya sanae cirno' length = min(len(A),len(B)) end = 0 for i in range(length): #利用索引遍历 if ord(A[i]) < ord(B[i]): print(1) end = 233 break elif ord(A[i]) > ord(B[i]): print(0) end = 233 break if end == 0: if length == len(A): print(1) else: print(0) ``` 那么 $B < C$ 会返回 True 吗?False ### str方法 #### 一行里多个数据的读入 **分裂** ``A.split(sep = ' ',n = -1) `` 括号里留空,默认分隔符空格,次数不限。 可指定分隔符 $sep$,也可指定分成 $n+1$ 字符串,组成列表返回。 #### 替换 ``A.replace('old','new'[,count]) `` 将字符串中所有'old'子串替换为'new'子串,若传了参数count,则前count个被替换。仿交互式情境如下: ``` >>>A = 'reimu marisa aya sanae cirno mystia' >>>A.replace('mystia','yuyuko') 'reimu marisa aya sanae cirno yuyuko’ >>> ``` #### 查找子串 ``A.find('sub'[,start[,end]]) `` 从下标start到end-1查找子串,返回第一次出现'sub'首位的下标,找不到返回 -1。 ``` >>>A.find('mystia') 29 >>>A.find('mystia',12,-1) -1 >>> ``` ### 练习 1切片练习(也不一定,能队就行) [代码示例](https://www.luogu.com.cn/paste/614sqvtm) 2 split练习(也不一定,能队就行) [代码示例](https://www.luogu.com.cn/paste/ud2y3fmn) 3 凯撒密码 [代码示例](https://www.luogu.com.cn/paste/y21q6v3u) --------- 枯燥乏味的东西终于是结束了。 最后,来听首歌吧! ![](bilibili:av14967296)