python学习——day02

本文参与「少数派读书笔记征文活动」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.不同路径下函数的调用:

import sys
sys.path.append('要调用的py文件的相对路径')
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):
    print("\r{:3}%".format(i),end="") #end=""不换行,光标处于本行末尾;\r回车,光标回到行首,打印下一次数据,即覆盖旧数据——刷新
    time.sleep(1)
#TestProBarV2.py
import time
scale=50
print("执行开始".center(scale//2,"-"))  #将'-'填充到两侧,第一个参数为宽度
start=time.perf_counter()
for i in range(scale+1):
    a='*'*i
    b='.'*(scale-i)
    c=(i/scale)*100
    dur=time.perf_counter()-start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
    time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))

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

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

程序的控制结构

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

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

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

#CalBMIV1.py
weight,height=eval(input("请输入体重/kg和身高/m,用逗号隔开:")) #eval去掉字符两边引号后,仅剩下——身高,体重
print("身高={:.2f}m 体重={:.2f}kg".format(height,weight))
BMI=weight/pow(height,2)
print("BMI数值为:{:.2f}".format(BMI))
inter,nat="",""
if BMI<18.5:
    inter="偏瘦"
    nat="偏瘦"
elif 18.5<=BMI<24:
    inter="正常"
    nat="正常"
elif 24<=BMI<25:
    inter="正常"
    nat="偏胖"
elif 25<=BMI<28:
    inter="偏胖"
    nat="偏胖"
elif 25<=BMI<30:
    inter="偏胖"
    nat="肥胖"
else:
    inter="肥胖"
    nat="肥胖"
print("国际诊断结果为"+inter)
print("国内诊断结果为"+nat)
#print("BMI指标为:国际'{0}',国内'{1}'".format(inter,nat))

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

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


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同理)

#TestCircle
for c in "PYTHON":
    if c=="T":
        continue
    print(c,end="")
else:
    print("正常退出")

for c in "PYTHON":
    if c=="T":
        break
    print(c,end="")
else:
    print("正常退出")

输出:PYHON正常退出
           PY

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

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


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中元素随机排列,返回打乱后的序列

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]

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

函数(完整代码的封装)

参数:

  • 位置参数
def power(x):
    return x * x
power(5)

输出:25

  • 默认参数
def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    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):
        s*=i
    for item in b:
        s*=item
    return s

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

输出:435456000

  • 关键字参数(允许传入0个或任意个含参数名的参数,自动组装为dict)
def person(name, age, **kw):
    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两种关键字参数
    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保留字在函数内部使用全局变量;
局部变量与内部变量是不同的变量,即使它们的值相同;
当前函数运行结束,局部变量内存释放;
全局变量则会一直存在到程序结束;
局部变量为组合数据类型且未创建,等同于全局变量(!是否真实创建->【指针】)

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

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

输出:25

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

输出:lambda函数

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

#DrawDigitsV1.py
import turtle

def drawGap(n):   #设置数码管或字符间隔
    turtle.penup()
    turtle.forward(n)

def drawLine(draw): #绘制单段数码管
    drawGap(5)
    turtle.pendown() if draw else turtle.penup()
    turtle.forward(40)
    drawGap(5)
    turtle.right(90)

def drawDigit(digit):   #根据数字绘制七段数码管
    drawLine(True) if digit in[2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in[0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in[0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in[0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in[0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in[0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in[0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)

#drawDigit(9)
#turtle.done()
# DrawDigitsV2.py
import turtle
import time
import DrawDigitsV1 as drawv1  # 引用同一文件路径下另一.py文件函数


# def drawGap():      #设置字符间隔(相当于实现空格效果)
#     turtle.penup()
#     turtle.forward(20)

def drawDate(date):  # 获得要输出的数字
    for i in date:
        if i == '-':
            turtle.write('年', font=("Arial", 18, "normal"))  # 输出字符串
            turtle.pencolor("green")
            turtle.fd(20)
        elif i == '=':
            turtle.write('月', font=("Arial", 18, "normal"))
            turtle.pencolor("blue")
            turtle.fd(20)
        elif i == '+':
            turtle.write('日', font=("Arial", 18, "normal"))
            turtle.pencolor("pink")
            turtle.fd(20)
        elif i == ':':
            turtle.write(':', font=("Arial", 18, "bold"))
            turtle.fd(20)
        else:
            drawv1.drawDigit(eval(i))
        drawv1.drawGap(20)


def main():
    turtle.setup(1300, 400, 200, 200)
    turtle.penup()
    turtle.fd(-620)
    turtle.pensize(5)
    turtle.pencolor("red")
    str = time.strftime("%Y-%m=%d+%H:%M:%S")
    drawDate(str)
    turtle.hideturtle()  # “海龟”隐身
    turtle.done()


main()

最终输出:

版权声明:本文为lovedbaobao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lovedbaobao/article/details/81123357

智能推荐

android问题记录

Error: Cannot fit requested classes in a single dex file (# methods: 80441 > 65536) 解决办法: gradle文件的defaultConfig默认配置里面增加...

ROS机器人Diego 1# 利用人工智能 风格迁移技术拍摄不同画风的视频

风格迁移,就是将一种图片的风格迁移到其他图片上,改变其他图片的风格,很好玩的一个人工自能模型,github上已经有很多实现的方法,本文参考https://github.com/hzy46/fast-neural-style-tensorflow 的算法,利用Diego1#的平台实现实时视频的风格转换,先上两张图看效果: 是不是很酷呢,其实实现方法和上篇博文中的原理是一样的,只是把人工智能的算法包装...

数据分析学习总结笔记17:文本分析入门案例实战

文章目录 1 数据准备 2 分词 3 统计词频 4 词云 5 提取特征 6 用sklearn进行训练 1 数据准备 数据样例如下, 数据总量为7.7万+: 本节通过一个实战的例子来展示文本分析的最简单流程。首先设定因变量为原始数据中的"评分"。自变量是"评价内容",这里根据评价内容提取TF-IDF特征。之后,通过评价内容的特征建模预测下整体评分。 以上只是最...

LeetCode 150. 逆波兰表达式求值

题目描述 根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。 换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1: 输入:[“2”, “1”, “+”, “3&r...

并查集原理及应用

并查集 树形的数据结构,每个集合有其代表节点,代表节点相同的元素属于同一集合。 find:通过查找节点的代表节点,判断节点所属集合。 union:合并两集合,小集合合并到大集合,使用大集合的代表节点。 在find的递归过程中,让路过节点的父节点直接赋值为代表节点,节省下次查找时间,如图所示。 计算岛的个数 遍历二维数组,遇到1时就将所相连的1都改为2,看看遇到多少次1,就是岛的数量。改数时使用回溯...

猜你喜欢

linux nutch1.0安装配置

1,下载nutch1.0 下载地址:http://archive.apache.org/dist/nutch/,下载这个文件nutch-1.0.tar.gz   2,上传到服务器 上传位置:/home/www/,解压nutch-1.0.tar.gz #tar -xvf nutch-1.0.tar.gz 重命名 #mv nutch-1.0 nutch   3,修改配置文...

如何搭建自己的博客?附加美化

如何搭建自己的blog?附加美化 前言: 之前在腾讯云以学生优惠租了一年的服务器,还买了一年的域名,忽然觉得不能闲置着域名,所以搭建了个博客,过程也遇到了很多的问题,望在此阐述,予以他人帮助,祝好~ 准备工作:使用Xshell连接上Linux服务器,我的是centos系统,方便进行操作。使用Xftp连接上Linux服务器,方便传输文件。 安装apache服务器:yum install httpd ...

rabbitmq五种模式详解(含实现代码)

1.简单模式 当生产端发送消息到交换机,交换机根据消息属性发送到队列,消费者监听绑定队列实现消息的接收和消费逻辑编写.简单模式下,强调的一个队列queue只被一个消费者监听消费. 1.1 结构   生产者:生成消息,发送到交换机 交换机:根据消息属性,将消息发送给队列 消费者:监听这个队列,发现消息后,获取消息执行消费逻辑 1.2应用场景 常见的应用场景就是一发,一接的结构 例如: 手机...

AndroidStudio 常用配置

1. 设置主题&左侧导航栏字体 AndroidStudio->Preferences(下同) 2. 设置字体大小 3. 取消竖线 间距设置大些 4. 控制台字体大小 5. 修改LogCat颜色 LogCat 色值 Verbose BBBBBB Debug 48BB31 Info 0070BB Warn BBBB23 Error FF0006 Assert 8F0005 5. 修改变量...

Kafka Producer

1.Producer简介 kafakclients链接 2.构造Producer 2.1简单构造 1.构建配置文件 首先第一步是进行用户鉴权的操作(如果Kafka集群需要的话) 然后需要配置的三个主要参数 broker的地址 key、value的序列化 2.构建生产者发送消息 首先我们应该杜绝 fire and forget的操作这样可能会导致消息丢失。 同步发送 这样发送通过对异常的处理可以消息...