#复习
import time
import turtle
turtle.fd(100)
turtle.rt(90)
turtle.fd(100)
turtle.rt(45)
turtle.fd(140)
turtle.done()
print(pow(2,100))
print(pow(2,200))
print(pow(2,499))
# print(pow(2,pow(2,15))) 太长了,所以注释掉
1267650600228229401496703205376 1606938044258990275541962092341162602522202993782792835301376 1636695303948070935006594848413799576108321023021532394741645684048066898202337277441635046162952078575443342063780035504608628272942696526664263794688
可以看出,想算多大算多大。 提供了四种进制表示形式。
print(0.1+0.3)
print(0.1+0.2)
print(0.1+0.2==0.3)
print(round(0.1+0.2,1)==0.3)
0.4 0.30000000000000004 False True
53位二进制表示一个浮点数,由于二进制和十进制的差距,不是一一对应,所以会造成这种问题。 为解决此问题,可以使用round()函数。
可以使用科学计数法来表示浮点数。
z = 1.23e-4 + 5.6e+89j
print(z)
print(z.real) # 获得实部
print(z.imag) # 获得虚部
(0.000123+5.6e+89j) 0.000123 5.6e+89
x = 10//3
y = 2**10
z = -12
a = -z
b = +x
c = 10**0.5
d = pow(10,0.5) # pow和**相同
print(x,y,z,a,b,c,d)
3 1024 -12 12 3 3.1622776601683795 3.1622776601683795
x = 3.1415
x**=3
print(x)
x = 3.1415
x=x**3
print(x)
31.003533398375005 31.003533398375005
print(123+4.0)
127.0
pow(3,pow(3,99),10000)
# pow(3,pow(3,99)) 很难算出来
4587
类型转换相关的函数:
# 1 一年365天,每天进步千分之一、退步千分之一。
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f}\n向下:{:.2f}".format(dayup,daydown))
# 2 千分之五呢?百分之一呢?其他呢?
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("每天进步{:.3f}可以得到:{:.3f}\n每天退步{:.3f}可以得到:{:.3f}".format(dayfactor,dayup,dayfactor,daydown))
dayfactor = 0.01
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("每天进步{:.2f}可以得到:{:.3f}\n每天退步{:.3f}可以得到:{:.3f}".format(dayfactor,dayup,dayfactor,daydown))
# 3 工作日的力量
# 一年365天,每周2休息日,退步1%。
# 数学思维->计算思维
value = 1
factor_up = 0.01
factor_down = 0.01
for day in range(365):
if day%7 in [0,6]: #周末
value *= (1-factor_down)
else:
value *= (1+factor_up)
print('工作日的力量:{:.2f}'.format(value))
# 4 工作日的努力
# 在工作日,要努力到什么水平,才能和每天1%达到一样的成绩?
# 自己写个函数
def weekday_method(factor_up,factor_down):
value = 1
for day in range(365):
if day%7 in [0,6]:
value *= (1-factor_down)
else:
value *= (1+factor_up)
return value
factor_up = 0.01
factor_down = 0.01
while weekday_method(factor_up,factor_down) < 37.78:
factor_up+=0.001
print('所需的努力参数是:{:.3f}'.format(factor_up))
向上:1.44 向下:0.69 每天进步0.005可以得到:6.175 每天退步0.005可以得到:0.160 每天进步0.01可以得到:37.783 每天退步0.010可以得到:0.026 工作日的力量:4.63 所需的努力参数是:0.019
抽象和自动化是重要的思维。 上面的代码涉及到了while循环、函数、分支等内容。
在第一章的时候曾经学习过:
'''你好,
今晚"'月色'真美"。'''
并不是说三单引号真的能成为注释,而是三单引号可以起到这样的作用。 Python一个人性化的一点是尽可能写的时候舒服点
'这里面有个双引号"'
"这里面有个单引号'"
test1 = '〇一二三四五六七八九十'
print(test1[:3]) #从开头到第3序号(不含3)
print(test1[1:8:2]) #从1号到8(不含8),间隔2
print(test1[::-1])
〇一二 一三五七 十九八七六五四三二一〇
#输入3
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekNum = eval(input("请输入您需要星期几?(数字1-7)"))
weekPos = (weekNum-1)*3
print(weekStr[weekPos:weekPos+3])
星期三
#输入3
weekStr = "一二三四五六七日"
weekNum = eval(input("请输入您需要星期几?(数字1-7)"))
weekPos = (weekNum-1)
print("星期"+weekStr[weekPos])
星期三
print(len("😅"))
print(str([1,2]))
print("1+1=2" + chr(10004))
print(str(ord("😅")))
for i in range(12):
print(chr(9800+i), end="") #中间没有间隔符号
1 [1, 2] 1+1=2✔ 128517 ♈♉♊♋♌♍♎♏♐♑♒♓
str = "A,B,C,OLG"
print(str.split(','))
str = "ababa"
print(str.count('aba'))
str = "十是十,四是四,十四是十四,四十是四十"
print(str.replace('四','4'))
print(str.center(50,'*'))
print(str) # 注意这些操作都不会改变str本身
str = '= python ='
print(str.strip(' =np'))
str = ' and '
print(str.join("一二三四五"))
['A', 'B', 'C', 'OLG'] 1 十是十,4是4,十4是十4,4十是4十 ***************十是十,四是四,十四是十四,四十是四十**************** 十是十,四是四,十四是十四,四十是四十 ytho 一 and 二 and 三 and 四 and 五
就是类似于C语言的printf那些东西。
str = "{}:计算机{}的CPU占用率为{}%".format("2022-02-12","MacBook Pro 18,3",8)
print(str)
str = "{1}是一门{0},{1}很好用。".format("编程语言","Python")
print(str)
2022-02-12:计算机MacBook Pro 18,3的CPU占用率为8% Python是一门编程语言,Python很好用。
str = "{0:=^30}".format("python")
print(str)
str = "{0:=>20}".format("python")
print(str)
str = "{0:=<20}".format("python")
print(str)
============python============ ==============python python==============
str = "{0:=^20,.6f}".format(114514.1919810)
print(str)
str = "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
print(str)
str = "{0:e},{0:E},{0:f},{0:%}".format(1.14514)
print(str)
===114,514.191981=== 110101001,Ʃ,425,651,1a9,1A9 1.145140e+00,1.145140E+00,1.145140,114.514000%
import time
print(time.time())
print(time.ctime())
print(time.gmtime())
1644638449.641355 Sat Feb 12 12:00:49 2022 time.struct_time(tm_year=2022, tm_mon=2, tm_mday=12, tm_hour=4, tm_min=0, tm_sec=49, tm_wday=5, tm_yday=43, tm_isdst=0)
t = time.gmtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",t))
2022-02-12 04:00:52
看看控制符:
我们也可以通过strptime()通过时间字符串构造成一个时间变量。
timeStr = "2022-02-12 04:00:52"
print(time.strptime(timeStr,"%Y-%m-%d %H:%M:%S"))
time.struct_time(tm_year=2022, tm_mon=2, tm_mday=12, tm_hour=4, tm_min=0, tm_sec=52, tm_wday=5, tm_yday=43, tm_isdst=-1)
start = time.perf_counter()
print(start)
for i in range(1919810):
;
end = time.perf_counter()
print(end)
print(end-start)
192355.968274708 192356.017365416 0.04909070799476467
start = time.perf_counter()
time.sleep(5)
end = time.perf_counter()
print(end-start)
5.00568583299173
scale = 10
print("{0:=^20}".format("执行开始"))
for i in range(scale+1): #从0到10,11次循环
a = '*' * i
b = '.' * (scale-i)
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.2)
print("{0:=^20}".format("执行结束"))
========执行开始======== 0 %[->..........] 10 %[*->.........] 20 %[**->........] 30 %[***->.......] 40 %[****->......] 50 %[*****->.....] 60 %[******->....] 70 %[*******->...] 80 %[********->..] 90 %[*********->.] 100%[**********->] ========执行结束========
#从0到100的动态刷新
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
100%
scale = 50 # 迭代50次
width = 15 # 20+->,共22
print("执行开始".center(scale//2,"*"))
start = time.perf_counter() # 实现计时效果
for i in range(scale+1):
progress = (i / scale)
a = '▶️' * (round(width*progress))
b = '⏺' * (width - round(width*progress))
end = time.perf_counter()
duration = end - start
print("\r{:.3%} [{}->{}] duration:{:.3f}".format(progress,a,b,duration),end="")
time.sleep(0.2)
print("\n执行完毕".center(scale//2,"*"))
***********执行开始********** 100.000% [▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️▶️->] duration:10.214********** 执行完毕**********
应该在长时间运行的程序中加入进度条,这也能够提升人们的体验。 当然,这涉及到一些有些有趣的心理学问题,比如前面增长的很快,后面很慢,这样就不太符合人的直观感受。 有相关的研究,开始展示的慢一些,后面越来越快,这样更符合人们的心理感受。