Chap 1
1.在C语言中为什么会出现不用引入头文件就可以运行printf函数的情况?
答:可能是因为在特定的编译器环境中已经默认包含了一些头文件的设置。
2.python单行注释用# ,而不是// ;多行注释用’’’或””” 。( python中 ” 和 ’ 并无太大区别 )
例如:#print() python本身其实没有多行注释
‘’’ 这里的多行注释其实是一个多行字符串
print(“a”) 它是个字符串表达式,python会运行它
print(“b”) 但是会马上扔掉——垃圾回收机制
‘’’
3. end=”” 可以避免换行。end其实像一个控制结尾的函数,在“ “内部可以凭个人想法加一些东西以达到一定的目的,如果”“内加了个\n那还是会换行。
4. f-string可以只让变量的值替换变量,从而表示出一些数学式(掌握)。
如下图中:若没使用f-string,将{x}+{y}写成x+y ,则会导致原本想表示的1+2被写成x+y。
# 这里中间两个“前一定要加\ ,\”也是一个转义字符,在这里可以避免12引号和34引号之间配对,相当于把引号也当作了一个字符。
5.input()接受后以字符串形式(文本)返回。
# a=input(“10”),a不可以直接用于数值计算。需要先int(x)进行类型转换,才可用于计算。
6.split()的使用
它主要用于将一个字符串按照指定的分隔符进行分割,并返回分割后的子字符串列表。 如果不指定分隔符,默认以空白字符(空格、换行符、制表符等)为分隔符。例如, string = "Hello world" , string.split() 会返回 ['Hello', 'world'] 。 也可以指定分隔符,比如 string = "apple,banana,cherry" ,使用 string.split(",") ,就会以逗号作为分隔符,返回 ['apple', 'banana', 'cherry'] 。
另外, split 方法还可以指定分割次数。例如 string.split(",", 1) ,对于刚才的字符串,就只会分割一次,得到 ['apple', 'banana,cherry'] 。
7. 为什么会有无可避免的浮点误差?如图:
答:计算机使用二进制,一些在日常10进制的有限小数在2进制中可能为无线循环小数。而浮点数表示时有位数限制,所以计算机只能截取部分二进制小数,导致最终在二进制转化回十进制的过程中出现一定误差。
8.课后总结
Chap 2
1.整数、分类问题:离散的
浮点数、回归问题:连续的
布尔值只有0或1(true或false)
type(1)=int type(0.1)=float type(1<2)=bool type( int )=type
2. n^m在python中表示为n**m
/是浮点除,算出的结果也是float,如:2/1=2.0
//是整除,算出的结果是int,结果若是小数则向下取整, 如3//2=1
&是取余,算出的结果也是int
3. %与math.fmod()的区别
% 运算符得到的余数的符号与除数相同。例如, 7 % -3 的结果是 -2 。math.fmod() 函数返回的余数的符号与被除数相同。例math.fmod(7, -3) 的结果是 1 。
4. a**b**c=a**(b**c) 而不等于a**(b*c)
5.一个可以判断x是否是数字的函数 (学会适当调用函数好处很大)
6.课后总结
Chap 3
1.变量名应该理解成一个指向一个存有数值的地址的标签,而不是一个数值的载体。
2.元组的解包
元组解包是将元组中的元素分别赋值给多个变量。
例如,有一个元组 t = (1, 2) ,可以这样解包: a, b = t ,执行后 a 的值为 1 , b 的值为 2 。
解包时,变量的数量要和元组中元素的数量相同,否则会报错。不过可以使用 * (星号)运算符来收集多余的元素。比如元组 t = (1, 2, 3, 4) ,如果写成 a, *b = t ,那么 a 的值是 1 , b 是一个列表 [2, 3, 4] 。这种方式在函数返回多个值,而你只对其中一个或几个值感兴趣时很有用。
3.一些在实际操作中需要反复进行的操作可以写成函数(help function)。
4.一些不在math库中的基本数学函数
5.课后总结
Chap 4
1. if语句流程:
( If --> elif --> elif --> else )
2.在python的数值计算中, false=0 , true=1。(C语言中也是如此)
3.match-case语句的使用:
case后面跟的一定得是个具体值(数值、列表、元组……),也可以跟通配符“ _ ”(可以表示所有值)
# 这里如果case400后执行的语句换成print,那么当status=400时,整个match-case语句会输出”Bad Request”并返回"Something's wrong with the internet"。(即直到执行return前,整个程序不终止)
4.遇到的一些错误
原因:在 Python 中,当你尝试打印 _name 时,你实际上是在打印这个函数对象本身,而不是调用这个函数并打印它的返回值。因此,你的代码 print(_name) 输出的是函数的内存地址(或者更具体地说,是函数对象的表示),而不是函数返回的结果。
所以,这里应该将print中的_name写成_name()
5.执行语句写pass即让程序啥也不干
6.课后总结
Chap 5
1.range的一些使用规则:
i在Python中,range() 函数用于生成一个整数序列。其一般形式为 range(start, stop[, step]),其中 start 是序列的开始值,stop 是序列结束的上限(注意,生成的序列不包括 stop 值),而 step 是可选的步长,若不进行设定,则默认为1。
j若要使 start>stop,那么step应设为负数,否则程序报错。(要生成一个倒序序列其实可以直接用反转reversed,不必重新设step)
k因为生成的是一个整数序列,所以start、stop、step都必须是整数。
2. continue 和break 的区别:
jcontinue 是跳过这次循环 kbreak 是跳出整个循环
3.假死循环——与环境交互后,在特定条件下才能终止的循环。
# 如此图中,循环是否停止只与操作者输入的东西有关,假如一直不输入done,那它就是个死循环。这里的操作者输入的过程就可以看成一次环境的交互,而输入done就是一个特定条件。
4.剪枝—— 在搜索过程中,通过预测或特定的判断条件,提前剪掉不可能是最优解的分支,避免不必要的搜索,从而加速搜索速度的一种算法。
# 上图是一个生成素数的基本算法,而下图则是通过剪枝优化后的一种算法,不难看出相较于上图的算法,下图的优化后的算法排除了偶数这一很容易就能确定不是素数的数,从而提升了搜索速度。且二者的速度差距会随着搜索范围的扩大而不断放大。
5. 这里的print()起到的作用是在循环间进行一次换行。
6.课后总结
Chap 6
1.python中 “ ( ‘ )的匹配原则是优先匹配最近的 “ ( ‘ )
2.在python中,一个转义字符的长度为1
3.对于两个输出相同的字符串,可以使用repr函数来检验它们实质上是否真的相同。
4.一些转义序列:
5.在平时的编程中 \ 的合理运用可以帮助我们避免单行代码过长等情况。
6.in运算( ‘a’ in ‘b’——判断a是否在b里面)
7.字符串的切片(左闭右开):左边默认是0(第一项),右边默认是-1(最后一项),步长默认是1。
# 使用规则和range很像
8. eval( )函数和相对更安全的ast.literal_eval( )的使用:
9.zip函数的使用:
zip(a,b)可以分别从两个字符串a、b里同时取出元素
10.enumerate()函数的使用:
# 这里的c也可以写成(a,b)的形式。
11. open()函数(文件操作):
# 不同模式下返回的文件对象功能也不同。
# 注意每次open操作后都要即使通过close() 关闭文件
# 若想避免总是用close(),可以用with
#对于图三第一行代码的解释:这行代码使用open函数打开(如果不存在则创建)一个名为ZenofPy.py的文件。"w"模式表示以写入方式打开文件,如果文件已存在,则会被覆盖。encoding="utf-8"指定了文件的编码格式为UTF-8,这对于包含非ASCII字符的文件内容很重要。as file表示将打开的文件对象赋值给变量file。
12.课后总结