python学习——day02

待我称王封你为后i 2022-05-19 03:42 455阅读 0赞

本文参与「少数派读书笔记征文活动」https://sspai.com/post/45653

参考文章:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

今天学到的小技巧(pycharm开发工具):
1.当前python文件调用同一路径下另一python文件中的函数:
File->Settings->搜索Python Console->勾选Add source roots to PYTHONPATH,然后右键项目Mark Directory as->Sources Root
2.不同路径下函数的调用:

  1. import sys
  2. sys.path.append('要调用的py文件的相对路径')
  3. import+要调用的python文件名

3.字体放大/缩小:
File->Settings->Keymap->搜索Increase Font Size/Decrease Font Size->双击->Add Mouse Shortcut
4.Ctrl+B:查看源代码 Ctrl+Q:查看函数文档 Ctrl+鼠标:查看内置函数 Ctrl+Alt+L:代码一键规范 Ctrl+Shift+ +/-:展开/收缩代码

time库:处理时间的标准库(最基础的)

1.时间获取:

  • time():获取计算机内部时间值(时间戳),浮点数
  • ctime() :获取时间并以易读方式表示,字符串
  • gmtime():获取时间表示为计算机可处理的模式(即其他程序可以利用)

2.时间格式化:

  • strftime(tpl,ts): tpl是格式化模版字符串,ts是计算机内部时间类型变量

    t=time().gmtime()
    time.strftime(“%Y-%m-%d %H:%M:%S”,t)

备注:Y/年份(0000~9999) m/月份(01~12) B/月份名称(January~December) b/月份名称缩写(Jan~Dec) d/日期(01~31)A/星期(Monday~Sunday) a/星期缩写(Mon~Sun) H/24小时制(00~23)h/12小时制(01~12) p/上下午(AM,PM) M/分钟(00~59) S/秒(00~59)

  • strptime(str,tpl):将字符串转换为时间,str为字符串形式时间值

3.程序计时:测量起止动作所经历的时间过程

  • sleep(s) :产生时间,使程序休眠,单位是秒,可是是浮点数。

    def wait():
    time.sleep(3.3) #程序在此处等待3.3秒再进一步向下运行

  • perf_counter():测量时间,可以获取计算机中央处理器CPU的时钟,非常精准。(计数值起点不确定,连续调用差值才有意义)

    start=time.perf_counter()
    end=time.perf_counter() #函数的每次调用都是基于上一次调用
    end-start

    TestRefresh.py

    import time
    for i in range(101):

    1. print("\r{:3}%".format(i),end="") #end=""不换行,光标处于本行末尾;\r回车,光标回到行首,打印下一次数据,即覆盖旧数据——刷新
    2. time.sleep(1)

    TestProBarV2.py

    import time
    scale=50
    print(“执行开始”.center(scale//2,”-“)) #将’-‘填充到两侧,第一个参数为宽度
    start=time.perf_counter()
    for i in range(scale+1):

    1. a='*'*i
    2. b='.'*(scale-i)
    3. c=(i/scale)*100
    4. dur=time.perf_counter()-start
    5. print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
    6. time.sleep(0.1)

    print(“\n”+”执行结束”.center(scale//2,’-‘))

最终输出:—————-执行开始—————
100%[**************************************************->]5.06s
—————-执行结束—————

文本进度条的不同设计函数(9种)

" class="reference-link">70

程序的控制结构

1.单分支结构
2.二分支结构
紧凑形式:适用于简单表达式的二分支结构(不支持带=的赋值形式,只支持表达式)

  1. guess=eval(input())
  2. print("猜{}了".format("对" if guess==99 else "错"))

3.多分支结构(if…elif…else)

  1. #CalBMIV1.py
  2. weight,height=eval(input("请输入体重/kg和身高/m,用逗号隔开:")) #eval去掉字符两边引号后,仅剩下——身高,体重
  3. print("身高={:.2f}m 体重={:.2f}kg".format(height,weight))
  4. BMI=weight/pow(height,2)
  5. print("BMI数值为:{:.2f}".format(BMI))
  6. inter,nat="",""
  7. if BMI<18.5:
  8. inter="偏瘦"
  9. nat="偏瘦"
  10. elif 18.5<=BMI<24:
  11. inter="正常"
  12. nat="正常"
  13. elif 24<=BMI<25:
  14. inter="正常"
  15. nat="偏胖"
  16. elif 25<=BMI<28:
  17. inter="偏胖"
  18. nat="偏胖"
  19. elif 25<=BMI<30:
  20. inter="偏胖"
  21. nat="肥胖"
  22. else:
  23. inter="肥胖"
  24. nat="肥胖"
  25. print("国际诊断结果为"+inter)
  26. print("国内诊断结果为"+nat)
  27. #print("BMI指标为:国际'{0}',国内'{1}'".format(inter,nat))

输入:请输入体重/kg和身高/m,用逗号隔开:49,159
输出:身高=159.00m 体重=49.00kg
BMI数值为:0.00
国际诊断结果为偏瘦
国内诊断结果为偏瘦

4.条件判断及组合
条件组合保留字:and(&&) or(||) not(!)

70 1
5.程序的异常处理
基本使用
try:
<语句块1>
except[异常类型]: #异常类型的名字在python已预定义(如:NameError)
<语句块2> #出现相应异常时执行
高级使用:
try:
<语句块1>
except[异常类型]:
<语句块2>
else:
<语句块3> #不发生异常时执行
finally:
<语句块4> #无论是否发生异常都会执行

程序的循环结构

1.遍历循环(从遍历结构中逐一提取元素放入循环变量)
for <循环变量> in <遍历结构>
<语句块>
例:for i in range(M[,N],[,K]): #K为步长
print(i)
例:for c in s: #s为字符串;c为字符
print(c,end=”,”)
例:for item in ls: #ls为列表
print(item,end=”,”)
例:for line in fi: #fi为文件标识符,遍历其每行,产生循环
<语句块>
2.无限循环
while <条件>:
<语句块>
循环控制保留字:break和continue
循环的扩展(循环与else):当循环没有被break语句退出时,执行else语句块,即else语句块作为“正常”完成循环的奖励(与异常处理的else同理)

  1. #TestCircle
  2. for c in "PYTHON":
  3. if c=="T":
  4. continue
  5. print(c,end="")
  6. else:
  7. print("正常退出")
  8. for c in "PYTHON":
  9. if c=="T":
  10. break
  11. print(c,end="")
  12. else:
  13. print("正常退出")

输出:PYHON正常退出
PY

random库:是使用伪随机数(根据随机数种子并采用梅森旋转算法生成的伪随机序列中的元素)的Python标准库

1.基本随机数函数:
seed(N) :(若后续程序需要再现随机过程),则调用此函数初始化给定的随机数种子N;若不调用此函数,默认为当前系统时间
random():生成一个[0.0,1.0]之间的随机小数

70 2
2.扩展随机数函数:
randint(a,b) :生成[a,b]之间的整数
getrandbits(k):生成一个k比特长的随机整数
uniform(a,b) :生成一个[a,b]之间的随机小数(精度为小数点后16位)
randrange(m,n[,k]):生成一个[m,n]之间步长为k的随机整数
choice(seq) :从序列seq中随机选择一个元素
shuffle(seq):将序列seq中元素随机排列,返回打乱后的序列

  1. s=[1,2,3,4,5,6,7,8,9];random.suffle(s);print(s) #在python多句程序排于一行用分号隔开

输出:[3,5,8,9,6,1,2,7,4]

70 3

  1. #CalPiV1.py
  2. #利用数学公式计算π值
  3. pi=0
  4. N=100 #累加数量
  5. for k in range(N):
  6. pi+=1/pow(16,k)*( \
  7. 4/(8*k+1)-2/(8*k+4)- \
  8. 1/(8*k+5)-1/(8*k+6)) #加斜杠\使代码换行
  9. print("圆周率值是:{}".format(pi))
  10. #CalPiV2.py
  11. #蒙特卡罗方法求解π(计算思维[非数学思维]:抽象一种过程,用计算机自动化求解)
  12. import random as ran
  13. import time as ti
  14. DARTS=1000*10000 #撒点数
  15. hits=0.0 #位于圆内部的点数量
  16. start=ti.perf_counter() #启动计时
  17. #开始撒点
  18. for i in range(1,DARTS+1):
  19. x,y=ran.random(),ran.random() #生成随机落点坐标(0~1)
  20. dist=pow(x**2+y**2,0.5) #求点到圆心的距离
  21. if dist<=1.0: #假设圆的半径为1
  22. hits=hits+1
  23. pi=4*(hits/DARTS)
  24. print("圆周率值是:{}".format(pi))
  25. print("运行时间是:{:.5f}s".format(ti.perf_counter()-start))

函数(完整代码的封装)

参数:

70 4

  • 位置参数

    def power(x):

    1. return x * x

    power(5)

输出:25

  • 默认参数

    def enroll(name, gender, age=6, city=’Beijing’):

    1. print('name:', name)
    2. print('gender:', gender)
    3. print('age:', age)
    4. print('city:', city)

    enroll(‘Sarah’,’F’)

输出:name: Sarah
gender: F
age: 6
city: Beijing

  • 可变参数(允许传入0个或任意个参数,自动组装为tuple)

    TestFunctionV1.py

    可变参数传递

    def fact(n,*b): #b是一个元组
    s=1
    for i in range(1,n+1):

    1. s*=i

    for item in b:

    1. s*=item

    return s

    print(fact(10,3,5,8)) #计算完10的阶层后又连续乘以3/5/8

输出:435456000

  • 关键字参数(允许传入0个或任意个含参数名的参数,自动组装为dict)

    def person(name, age, **kw):

    1. print('name:', name, 'age:', age, 'other:', kw)

    person(‘Adam’,45,gender=’M’,job=’Engineer’)

输出:name: Adam age: 45 other: {‘gender’: ‘M’, ‘job’: ‘Engineer’}

  • 命名关键字参数(限制传入的关键字参数,和关键字参数不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数)

    def person(name, age, *, city, job): #只能传入city和job两种关键字参数

    1. print(name, age, city, job)

    person(‘Jack’, 24, city=’Beijing’, job=’Engineer’) #必须传入参数名,若缺少参数名city和job,Python解释器把这4个参数均视为位置参数,但person()函数仅接受2个位置参数。

输出:Jack 24 Beijing Engineer

  • 参数组合(可同时选用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,但定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数)

注意:对于任意函数,都可以通过类似func(*args, **kw)的形式调用。

函数的返回值return: 可以传递0个返回值或任意多个返回值,返回类型为元组(a,b,c))
局部变量:函数内部使用的变量
全局变量:函数外部使用的变量
注意:可以使用global保留字在函数内部使用全局变量;
局部变量与内部变量是不同的变量,即使它们的值相同;
当前函数运行结束,局部变量内存释放;
全局变量则会一直存在到程序结束;
局部变量为组合数据类型且未创建,等同于全局变量(!是否真实创建->【指针】)

70 5

70 6

lambda保留字定义的函数:一种匿名函数,即没有名字的函数,它返回函数名作为结果(仅用于定义简单的,一行内的函数,主要用于一些特定函数或方法的参数)
<函数名>=lambda<参数>:<表达式>

  1. f=lambda x,y:x+y
  2. f(10,15)

输出:25

  1. f=lambda:"lambda函数" #无参数
  2. print(f())

输出:lambda函数

七段数码管显示(系统时间)

70 7

  1. #DrawDigitsV1.py
  2. import turtle
  3. def drawGap(n): #设置数码管或字符间隔
  4. turtle.penup()
  5. turtle.forward(n)
  6. def drawLine(draw): #绘制单段数码管
  7. drawGap(5)
  8. turtle.pendown() if draw else turtle.penup()
  9. turtle.forward(40)
  10. drawGap(5)
  11. turtle.right(90)
  12. def drawDigit(digit): #根据数字绘制七段数码管
  13. drawLine(True) if digit in[2,3,4,5,6,8,9] else drawLine(False)
  14. drawLine(True) if digit in[0,1,3,4,5,6,7,8,9] else drawLine(False)
  15. drawLine(True) if digit in[0,2,3,5,6,8,9] else drawLine(False)
  16. drawLine(True) if digit in[0,2,6,8] else drawLine(False)
  17. turtle.left(90)
  18. drawLine(True) if digit in[0,4,5,6,8,9] else drawLine(False)
  19. drawLine(True) if digit in[0,2,3,5,6,7,8,9] else drawLine(False)
  20. drawLine(True) if digit in[0,1,2,3,4,7,8,9] else drawLine(False)
  21. turtle.left(180)
  22. #drawDigit(9)
  23. #turtle.done()
  24. # DrawDigitsV2.py
  25. import turtle
  26. import time
  27. import DrawDigitsV1 as drawv1 # 引用同一文件路径下另一.py文件函数
  28. # def drawGap(): #设置字符间隔(相当于实现空格效果)
  29. # turtle.penup()
  30. # turtle.forward(20)
  31. def drawDate(date): # 获得要输出的数字
  32. for i in date:
  33. if i == '-':
  34. turtle.write('年', font=("Arial", 18, "normal")) # 输出字符串
  35. turtle.pencolor("green")
  36. turtle.fd(20)
  37. elif i == '=':
  38. turtle.write('月', font=("Arial", 18, "normal"))
  39. turtle.pencolor("blue")
  40. turtle.fd(20)
  41. elif i == '+':
  42. turtle.write('日', font=("Arial", 18, "normal"))
  43. turtle.pencolor("pink")
  44. turtle.fd(20)
  45. elif i == ':':
  46. turtle.write(':', font=("Arial", 18, "bold"))
  47. turtle.fd(20)
  48. else:
  49. drawv1.drawDigit(eval(i))
  50. drawv1.drawGap(20)
  51. def main():
  52. turtle.setup(1300, 400, 200, 200)
  53. turtle.penup()
  54. turtle.fd(-620)
  55. turtle.pensize(5)
  56. turtle.pencolor("red")
  57. str = time.strftime("%Y-%m=%d+%H:%M:%S")
  58. drawDate(str)
  59. turtle.hideturtle() # “海龟”隐身
  60. turtle.done()
  61. main()

最终输出:70 8

发表评论

表情:
评论列表 (有 0 条评论,455人围观)

还没有评论,来说两句吧...

相关阅读

    相关 初学python_day02

    01昨日内容回顾   编译型:一次性的编译成二进制     优点:执行速度快     缺点:开发效率低,不能跨平台。        C   解释型:逐行解释,逐行运

    相关 day02 python 基础

    ''' 列表: 定义:在[]内,可以存放多个任意类型的值,并以逗号隔开。 一般用于存放学生的爱好,if 课堂的周期等等...

    相关 python开发day02

    一 while循环  while 条件      代码块(循环体)  \:  判断条件是否为真,如果是真,则执行代码块,