不知道烂尾了多少次的Python学习计划,2019年争取把这个flag拔掉。课程为尹成python。
基础部分分成了27天,从输入输出到mysql数据库编程,这个日志记录这一部分认为重要的地方。
1、 常量不能被赋值,下面这个是错的
13=13
2、 str转实数
eval()
3、 反斜杠链接各行,分号多行合为一行
\ ;
4、
\ 除法 \\ 整除 % 求模 ** 开方
5、 num += 1 等价于 num = num+1
6、 整数转str,直接调用str()
int()取整数
round()四舍五入
7、 给变量赋值实际上是传递新的常量地址
8、 None主要用于判断常量有没有人正在使用
9、 平方根
import math math.sqrt(9) #9平方根
10、
ord() 求字符的编号
chr()由编号求字符
常用于字符串加密,大小写转换
11、print()
print('a', end=' ') #控制结尾字符,默认换行 print('a', sep=' ') #控制间隔字符
12、 format()字符串格式化
format(10.345, '10.8f') #10为宽度,8为小数点位,f为浮点数 format(10.345, '<10.8f') #<小于号,左对齐 format(1234, '10d') #d为整数 #s为字符串
format()返回值为str类型
13、 num%26,%为取模
num模26,结果范围为0-25
14、 10.93元,提取元角分
int(eval(10.93)) 元 int(eval(10.93)*10)%10 角 int(eval(10.93)*100)%10 分
误差
10.03*100=1002.999999 #所以当执行下面时会有误差 int(10.03*100)%10 #会等于2 int(round(10.03*100))%10 #得3,先进行了四舍五入
15、 字符串比较,按照ASCII码大小进行比较
16、 0为false,非0为ture
字符串为空 false,非空ture
if在运算时,会转成布尔类型
bool(none)=flase
17、
('%d乌拉,%(num=7)) #占位,传值
18、 random
import random num1=random.randrange(0,10) #0-10,不含10 num2=random.randint(0,10) #0-10,含10
19、
and #且 or #或 not #非,结合性从右往左
20、 短路
print(3>2 and 10) #and运算符,没有找到假之前,都取最后成立的值 10 print(2>3 or 10) #or运算符,没有找到真之前,都取最后成立的值 10 print(2<3 or 10) True
21、 关系运算符
is #两个变量是否指向同一个地址(是否共用一个地址) is not
22、 运算符
print(5>3) true print(5>3>2) #等价于 5>3 且 3>2 true print(5>3<2) #等价于 5>3 且 3<2 flase
x关系y关系z 等价于 x关系y且y关系z
23、 while规则,与if一样,会对表达式进行转换,转为布尔值。true继续循环,flase退出循环。
true 1,2,-1,’ ‘,ture,1.234
flase 0,”,None,flase
24、 浮点数误差
import time num=2.0 while num!=0: num -=0.1 print(num) time.sleep(0.5)
运行结果有误差
25、 if嵌入print
print('AAAA' if bool(3) else 'BBBB')
等价于,if bool() 为true AAAA,flase BBBB
26、 if嵌入num
x=10 num= 10 if x>18 else 20 print(num)
true返回前面的,false返回后面的
27、 if,else
import os os.system('calc') if 3>2 else os.system('notepad')
如果3>2成立,运行前半部分,不成立,运行后半部分
28、 判断是否为三位数
num=eval(input('输入三位整数')) if (num//100 > 0 and num//100<10): print('三位数') else: print('不是三位数')
29、 同步异步
import os while -1: os.system(‘notepad’) #同步模式,一个程序执行结束,执行下一个 os.system('start notepad') #异步模式
30、 猜数字
import random startnum=random.randint(1,10000)#随机数 num=eval(input("请输入一个数字")) while num!=startnum: #while()条件,跳出循环的表达式取反 if num>startnum: print("big") else: print("small") num=eval(input("再次输入")) else: print("right") print(num,startnum)
31、 输入输出重定向
>写入文本覆盖 >>增加模式 <输入
32、 绘制表格
for i in range(1,5) j = 0 while j<i: print(j, end=" ") j += 1
输出
0 0 1 0 1 2 0 1 2 3
33、 break中断循环(结束整个循环)
num=eval(input("输入一个数字")) for i in range(1000): if num == i print('find') #break print(i)
假设输入,在123时会打印find,但是会循环999次。
如果加入break,就会在123时退出
34、 continue(结束本次循环)
for i in range(100): if i == 30: continue print(i)
程序循环到99,不会打印30,30时会跳过print语句
结束本次循环,本次循环continue执行,本次循环后续代码不会执行。常用于筛选。
打印所有奇数
for i in range(100): if i%2==0: continue print(i)
35、取出最大数
思路:先读取一个值maxdata,然后循环读取剩下的值,只要找到比最初读取的数大的,就将新的值赋给maxdata。
代码
num=eval(input("输入数据数量")) #读取第一个值=10 print(num) maxdata=eval(input("data")) print(maxdata) for i in range(num-1): #循环9次 data=eval(input("data")) if data>maxdata: maxdata=data print(data) print("max",maxdata)
数据为tt.txt,10指10个数据,以输入重定向的方式运行。python name.py < tt.t
10 97 34 59 28 98 165 73 81 13 105
取出最大数、次大数
num=eval(input("输入数据数量")) #读取第一个值=10 print(num) maxdata=eval(input("data")) #100 #90 nextdata=eval(input("data")) #90 #100 #max >nextmax 确保max >nextmax if maxdata<maxdata: temp=maxdata maxdata=nextdata nextdata=temp for i in range(num-2): x = eval(input('data')) if x > maxdata: nextdata = maxdata maxdata = x elif x < maxdaat if x < nextdata: pass elif x > nextdata: nextdata = x print(maxdata) print(nextdata)
思路:先取出两个数,maxdata和nextdata,保证maxdata大于nexdata。循环8次,处理剩下的8个数据。如果取出的数比maxdata大,则将原来的maxdata的值赋值给nextdata,新取的值赋值给maxdata,这样就可以找出最大值。
如果取出的值小于maxdata,且小于nextdata,则循环结束。如果取出的值小于maxdata,且大于nextdata,则将取出的值赋值给nextdata。
36、按行显示
count=1 for i in range(100,1000+1): if i % 5 == 0 and i % 6 == 0: print(i,end=" ") if count %12==0: #按照行显示 print("") count+=1
题目:找出能同时被5和6整除的数,每行显示12个。
按行显示的思路是,先定义一个初始值count=1,在需要换行的地方添加判断,如果count模12=0,则打印一个空(换行),然后自增。
37、在day6-16提到了装饰器模式,将函数当作参数传进去。emmmm?