• 【21天python打卡】第17天 python经典案例(3)


    ​​大家好,今天是21天python打卡第17天,今天我们继续说说python的经典案例。本文重点说明了math函数和def函数的使用方法。

     

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。


     目录

    天天向上的力量

    天天向上的力量(1)

    天天向上的力量(2)

    天天向上的力量(3)

    天天向上的力量(4)

    天天向上的力量(5)

    获取星期字符串

    代码实现

    凯撒密码

    代码实现

    基本的多行文本进度条

    代码实现

    单行动态刷新

    代码实现

    带刷新的文本进度条

    代码实现


     

    天天向上的力量

    我们通过几个不同的案例,来学习不同场景下的应用。

    我们先介绍什么是math函数

    Python math 模块提供了许多对浮点数的数学运算函数。需要注意的是,这些函数一般是对平台 C 库中同名函数的简单封装, 所以一般情况下, 不同平台下计算的结果可能稍微地有所不同, 有时候甚至有很大出入。

    主要功能有:

    幂数:幂次方、平方根

    对数:2、10、e相关的对数操作

    圆相关:π、弧度与角度的转换

    三角函数:正三角函数、反三角函数

    其他常用:小数的整数部分、向上取整、向下取整、两个数的最大公约数、取余数...

    幂数

    幂与平方根

    # pow(x, y):返回x的y次方

    print(math.pow(2, 4)) # 2**4

    # ldexp(x, i):返回x*(2**i)的值

    print(math.ldexp(5, 2)) # 5*(2**2)=20.0

    # sqrt(x):求x的平方根

    print(math.sqrt(16)) # 4.0

    # factorial(x):取x的阶乘的值

    print(math.factorial(5)) # 5*4*3*2*1 # 120

    # hypot(x, y):得到(x**2+y**2)的平方根

    print(math.hypot(3, 4)) # 5

    常数e相关

    import math

    # 常数e

    math.e # 2.718281828459045

    # exp(x):返回常数e的x次方

    math.exp(2) # 7.38905609893065,相当于math.e**2

    # expm1:返回常数e的x次方的值减1

    math.expm1(1) # 1.718281828459045,相当于math.exp(1) - 1

    对数

    # log2(x):返回x的基2对数

    print(math.log2(128)) # 7

    # log10(x):返回x的以10为底的对数

    print(math.log10(100)) # 2

    # log(x, base):返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)

    print(math.log(256, 4)) # 4

    # log1p(x)::返回x+1的自然对数(基数为e)的值

    print(math.log1p(5))

    圆相关

    # pi:常数π,圆周率

    print(math.pi) # 3.141592653589793

    angle = 30 # 30度

    # radians:把角度x转换成弧度

    print(math.radians(angle)) # 0.5235987755982988

    print(30*math.pi/180) # 效果相同

    # degrees:把x从弧度转换成角度

    temp = math.radians(angle)

    print(math.degrees(temp)) # 29.999999999999996

    三角函数

    sin、cos、tan

    math 模块对正三角函数的计算,变量是弧度,所以在计算时需要先将角度转换为弧度

    angle = 30 # 30度

    radian = math.radians(angle) # 角度转换成弧度

    print(math.sin(radian))

    print(math.cos(radian))

    print(math.tan(radian))

    asin和acos和atan

    math 模块对反三角函数的计算,返回值是弧度

    h = math.asin(0.5) # sin(30) = 0.5

    print(math.degrees(h)) # 30.000000000000004

    h = math.acos(0.5) # cos(60) = 0.5

    print(math.degrees(h)) # 60.00000000000001

    h = math.atan(1) # tan(45) = 1

    print(math.degrees(h)) # 45.0

    sinh和cosh和tanh,asinh和acosh和atanh

    双曲正弦、余弦、正切,反双曲正弦、余弦、正切

    其他

    # trunc(x):返回x的整数部分

    print(math.trunc(8.3)) # 8

    # ceil(x):取大于等于x的最小的整数值,如果x是一个整数,则返回x

    print(math.ceil(10.2)) # 11

    # floor(x):取小于等于x的最大的整数值,如果x是一个整数,则返回自身

    print(math.floor(15.3)) # 15

    # fabs(x):返回x的绝对值

    print(math.fabs(-13)) # 13.0

    # modf(x):返回由x的小数部分和整数部分组成的元组

    print(math.modf(132.333)) # (0.3329999999999984, 132.0)

    # copysign(x, y):把y的正负号加到x前面,可以使用0

    print(math.copysign(10 ,-15)) # -10.0

    # fmod(x, y):得到x/y的余数,其值是一个浮点数

    print(math.fmod(15, 2)) # 1.0

    # gcd(x, y):返回x和y的最大公约数

    print(math.gcd(8, 100)) # 4

    # frexp(x):返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围

    print(math.frexp(10))

    # fsum(x):对迭代器里的每个元素进行求和操作

    print(math.fsum([1, 2, 3, 4])) # 10.0

    # isfinite(x):如果x是正无穷大或负无穷大,则返回True,否则返回False

    #

    # isinf(x):如果x是正无穷大或负无穷大,则返回True,否则返回False

    #

    # isnan(x):如果x不是数字True,否则返回False

    print(math.isnan(1.222))

    后面我们还用到def函数,这里就简单介绍一下。

    1.def函数 定义函数,调用函数。就是对一个新函数的自定义,有简单的函数也有复杂的函数。
    2.基本用法def function_name(parameters): return
    3.def使用位置 在这个关键字之后是标识函数的名字; 其次是在一对括号中可以附上一些变量名; 最后在行的末尾是冒号。接下来是语句块--函数的一部分。
    4.使用实例def sum_2_nums(a,b): #def 定义函数 result = a+b print('%d+%d=%d'%(a,b,result)) num1 = int(input('请输入第一个数字:'))

     

    天天向上的力量(1)

    1. #DayDayUp365.py
    2. import math
    3. dayup = math.pow((1.0 + 0.001), 365) # 每天提高0.001
    4. daydown = math.pow((1.0 - 0.001), 365) # 每天荒废0.001
    5. print("向上: %.2f, 向下: %.2f."%(dayup, daydown))

    天天向上的力量(2)

    1. #DayDayUp365.py
    2. import math
    3. dayup = math.pow((1.0 + 0.005), 365) # 每天提高0.005
    4. daydown = math.pow((1.0 - 0.005), 365) # 每天荒废0.005
    5. print("向上: %.2f, 向下: %.2f."%(dayup, daydown))

    天天向上的力量(3)

    1. #DayDayUp365.py
    2. import math
    3. dayfactor = 0.01
    4. dayup = math.pow((1.0 + dayfactor), 365) # 提高dayfactor
    5. daydown = math.pow((1.0 - dayfactor), 365) # 放任dayfactor
    6. print("向上: {:.2f}, 向下: {:.2f}.".format(dayup, daydown))

    天天向上的力量(4)

    1. #DayDayUp365.py
    2. dayup, dayfactor = 1.0, 0.01
    3. for i in range(365):
    4. if i % 7 not in [6, 0]:
    5. dayup = dayup * (1 + dayfactor)
    6. else:
    7. dayup = dayup * (1 - dayfactor)
    8. print("向上5 天向下2 天的力量: {:.2f}.".format(dayup))

    天天向上的力量(5)

    1. #DayDayUp365.py
    2. def dayUP(df):
    3. dayup = 1.0
    4. for i in range(365):
    5. if i % 7 in [6, 0]:
    6. dayup = dayup * (1 - 0.01)
    7. else:
    8. dayup = dayup * (1 + df)
    9. return dayup
    10. dayfactor = 0.01
    11. while (dayUP(dayfactor)<37.78):
    12. dayfactor += 0.001
    13. print("每天的努力参数是: %.3f."%dayfactor)

    获取星期字符串

    代码实现

    1. weekstr = "星期一星期二星期三星期四星期五星期六星期日"
    2. weekid = eval(input("请输入星期数字(1-7): "))
    3. pos = (weekid - 1)*3
    4. print(weekstr[pos: pos+3])

    凯撒密码

    代码实现

    1. plaincode = input("请输入明文: ")
    2. for p in plaincode:
    3. if ord("a") <= ord(p) <= ord("z"):
    4. print(chr(ord("a") + (ord(p) - ord("a") + 3)%26),end='')
    5. else:
    6. print(p, end='')

    基本的多行文本进度条

    代码实现

    1. #TextProgress Bar.py
    2. import time
    3. scale = 20
    4. print("------执行开始------")
    5. for i in range(scale+1):
    6. a, b = '**' * i,'..' * (scale - i)
    7. c = (i/scale)*100
    8. print("%{:^3.0f}[{}->{}]" .format (c, a, b))
    9. time.sleep(0.1)
    10. print("------执行结束------")

    单行动态刷新

    代码实现

    1. #TextProgressBar.py
    2. import time
    3. for i in range(101):
    4. print("\r{:2}%".format(i), end="")
    5. time.sleep(0.05)

    带刷新的文本进度条

    代码实现

    1. #TextProgress.py
    2. import time
    3. scale = 50
    4. print("执行开始".center(scale//2,'-'))
    5. t = time.clock()
    6. for i in range(scale+1):
    7. a = '*' * i
    8. b = '.' * (scale - i)
    9. c = (i/scale)*100
    10. t -= time.clock()
    11. print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
    12. time.sleep(0.05)
    13. print("\n"+"执行结束".center(scale//2,'-'))

    今天就分享到这里,下一篇我们继续分享python案例。

  • 相关阅读:
    Python可视化之Matplotlib
    Windows通过cmd运行快速启动应用
    非常全的一份Python爬虫的Xpath博文
    补充记录sql基础语法(未完待续8/25)
    王杰C++day6
    微透镜阵列的高级模拟
    springboot集成dubbo配置多注册中心
    tensorflow张量运算
    STM32--EXTI外部中断
    【Redis】Redis实现分页+多条件模糊查询组合方案
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/126392161