一、Math
1.1 概述
Math為Python提供的用于對浮點數進行運算的子產品,其與Java中的java.util.Math類相似。要想使用math對應的函數,就必須先通過如下語句進行導入:
import math
1.2 常量
對于math子產品而言,其提供了一些常量來表示特殊值,下面為對應的常用值:
常量 | 描述 |
math.e | 傳回歐拉數 (2.7182...) |
math.inf | 傳回正無窮大浮點數 |
math.nan | 傳回一個浮點值 NaN (not a number) |
math.pi | π 一般指圓周率。 圓周率 PI (3.1415...) |
math.tau | 數學常數 τ = 6.283185...,精确到可用精度。Tau 是一個圓周常數,等于 2π,圓的周長與半徑之比。 |
下面給出一個例子來列印這幾個常用的特殊值:
import math
print(f"歐拉數:{math.e}")
print(f"正無窮浮點數:{math.inf}")
print(f"非數:{math.nan}")
print(f"圓周率:{math.pi}")
print(f"圓周常數(約為2π):{math.tau}")
執行結果如下:
1.3 常用方法
1.3.1 舍入方法
對于舍入類的方法有:ceil、floor兩個,其中,ceil表示向上取整,floor表示向下取整。當然,Python也提供了四舍五入的方法:round。隻不過該方法屬于通用方法,下面給出對應的例子:
import math
# ceil
print(f"3.4向上取整為:{math.ceil(3.4)}")
print(f"-3.4向上取整為:{math.ceil(-3.4)}")
# floor
print(f"3.4向下取整為:{math.floor(3.4)}")
print(f"-3.4向下取整為:{math.floor(-3.4)}")
# round
print(f"3.4四舍五入為:{round(3.4)}")
print(f"-3.4四舍五入為:{round(-3.4)}")
print(f"3.5四舍五入為:{round(3.5)}")
print(f"-3.5四舍五入為:{round(-3.5)}")
執行結果如下:
1.3.2 求方
與求方相關的函數有:pow、sqrt和cbrt。其中,pow函數用于求某個數的n次方,sqrt用于求某個數的平方根,cbrt用于求某個數的立方根。下面給出對應的示例:
import math
# pow
print(f"3的3次方為:{math.pow(3, 3)}")
# sqrt
print(f"4的平方根為:{math.sqrt(4)}")
# cbrt
print(f"27的立方根是:{math.cbrt(27)}")
# log(x, base)
print(f"log以5為底25的對數是:{math.log(25, 5)}")
# log2
print(f"log以2為底16的對數是:{math.log2(16)}")
# log10
print(f"log以10為底1000的對數是:{math.log10(1000)}")
執行結果如下:
1.3.3 常見數學運算
Python提供了一些常見的數學運算,分别為:factorial(階乘)、fsum(求和)、gcd(最大公約數)、prod(求積)等。下面給出對應的例子:
import math
l = [1, 2, 3, 4]
print(f"4的階乘為:{math.factorial(4)}")
print(f"{l}的所有數之和為:{math.fsum(l)}")
print(f"7求餘3結果為:{math.fmod(7, 3)}")
print(f"8和12的公約數為:{math.gcd(8, 12)}")
print(f"-3的絕對值為:{math.fabs(-3)}")
print(f"{l}的所有數之積為:{math.prod([1, 2, 3, 4])}")
執行結果為:
1.3.4 弧度和角度互轉
Python提供了角度和弧度互轉的函數,分别為:radians和degree。其中,radiansb用于将弧度值轉為角度值,而degree則用于将角度制轉為弧度值。下面給出對應的示例:
import math
# 弧度轉角度
print(f"π 為{math.degrees(math.pi)} 度")
print(f"π/2 為 {math.degrees(math.pi / 2)} 度")
print(f"π/4 為 {math.degrees(math.pi / 4)} 度")
# 角度轉弧度
print(f"45度為:{math.radians(45) / math.pi} π")
print(f"90度為:{math.radians(90) / math.pi} π")
print(f"180度為:{math.radians(180) / math.pi} π")
執行結果如下:
1.3.5 三角函數
Python也提供了三角函數運算的函數,如:正弦、餘弦及正切等,其入參為弧度值,而非角度值。但由于Python的math子產品是使用浮點數進行運算,是以得出的值并不會如數學推斷的精準。下面給出對應的例子:
import math
# 正弦
print(f"30度的正弦值為:{math.sin(math.radians(30))}")
# 餘弦
print(f"60度的餘弦值為:{math.cos(math.radians(60))}")
# 正切值
print(f"45度的正切值為:{math.tan(math.radians(45))}")
# 反正弦值
print(f"30度的反正弦值為:{math.asin(math.radians(30))}")
# 反餘弦值
print(f"30度的反餘弦值為:{math.acos(math.radians(30))}")
# 反正切值
print(f"45度的反正切值為:{math.atan(math.radians(45))}")
執行結果如下:
1.3.6 高階函數
Python還提供了一些高階函數,如:dist、gamma、hypot。其中,dist函數用于計算距離,gamama函數則用于傳回伽馬函數在x值處的自然對數,hypot函數用于傳回歐幾裡得範數,其結果相當于sqrt(sum(x ** 2 for x in coordinates))。
下面給出對應的示例:
import math
# dist計算距離
print(f"(1, 1)和(4, 5)之間的距離為:{math.dist((1, 1), (4, 5))}")
# gamama函數
print(f"3在伽瑪函數中對應的自然數為:{math.gamma(3)}")
# 歐幾裡得函數
print(f"邊為3,4, 5對應的歐幾裡德數為:{math.hypot(3, 4, 5)}")
執行結果如下:
二、Random
2.1 概述
random子產品為Python提供的用于生成随機數的子產品。與math子產品一樣,在使用前需先使用import語句進行導入,如下:
import random
下面給出對應的示例:
import random
print(f"生成0-1之間的随機數為:{random.random()}")
執行結果如下:
2.2 常用方法
2.2.1 seed
seed函數用于生成随機數的種子,可在調用随機子產品的函數前調用該函數。下面給出對應的例子:
import random
random.seed()
print(f"使用預設的種子生成随機數:{random.random()}")
print(f"使用預設的種子生成随機數:{random.random()}")
random.seed(10)
print(f"使用整數10種子生成的随機數:{random.random()}")
random.seed(10)
print(f"使用整數10種子生成的随機數:{random.random()}")
random.seed("hello", 2)
print(f"使用字元串種子生成随機數:{random.random()}")
執行結果如下:
2.2.2 randrange
randrange函數的入參為:start、stop和step。用于傳回從start到stop間步長為step的随機元素。下面給出對應的示例:
import random
# 傳回5個 1-10之間的随機數
i = 0
while i < 5:
print(f"傳回1-10的随機數:{random.randrange(1, 10)}")
i += 1
# 傳回5個1-10之間且步長為2的随機數
i = 0
while i < 5:
print(f"傳回1-10之間且步長為2的随機數:{random.randrange(1, 10, 2)}")
i += 1
執行結果如下:
2.2.3 randint
randint函數用于傳回從a到b之間的整數,下面是對應的示例:
import random
# 傳回五個1到10之間的整數
i = 0
while i < 5:
print(f"1到10之間的整數為:{random.randint(1, 10)}")
i += 1
執行結果為:
2.2.4 choice
choice函數用于随機傳回序列中的一個元素,若序列為空,則會抛出異常。下面給出對應的示例:
import random
s = [1, 2, 3, 4, 5]
print(f"随機傳回的數數為:{random.choice(s)}")
t = ("Tom", "Jerry", "Spike", "Tuffy", "Tyke")
print(f"随機傳回的字元串為:{random.choice(t)}")
執行結果如下:
三、時間相關
對于Python 而言,其通過 time 和 calendar 子產品來擷取格式化的日期和時間。對于計算機中的時間而言,會使用距時間元年(1970年1月1日0時0分0秒)經過多久來表示。對于Python是用距時間原點經過多少秒的浮點數來表示,而Java則是使用距時間原點所經過多少毫秒的長整型來表示。
下面通過 time.time() 函數來擷取目前的時間戳,對應示例如下:
import time
ticks = time.time()
print(f"目前的時間為:{ticks}")
執行結果如下:
3.1 時間元組
所謂時間元組其本質是一個元組,隻不過其是由9個數字組成的元組,每個數字都有着特殊的含義,下面通過一個表來說一下各個數字的含義:
序号 | 字段 | 值 |
年,用4位數表示 | 2023 | |
1 | 月 | 1到12 |
2 | 日 | 1到31 |
3 | 小時 | 0到23 |
4 | 分鐘 | 0到59 |
5 | 秒 | 0到60或61(61為閏秒) |
6 | 一周的第幾日 | 0到6(0是周一) |
7 | 一年的第幾日 | 1到366(儒略曆) |
8 | 夏令時 | -1, 0, 1, -1 ,決定是否為夏令時辨別 |
當然,該元組還具有若幹屬性,如下:
序号 | 屬性 | 值 |
tm_year | 2023 | |
1 | tm_mon | 1到12 |
2 | tm_mday | 1到31 |
3 | tm_hour | 0到23 |
4 | tm_min | 0到59 |
5 | tm_sec | 0到60或61(61為閏秒) |
6 | tm_wday | 0到6(0是周一) |
7 | tm_day | 1到366(儒略曆) |
8 | tm_isdst | -1, 0, 1, -1 ,決定是否為夏令時辨別 |
3.2 常見用法
下面介紹時間函數的日常用法。
3.2.1 擷取目前時間
擷取目前時間隻需将 time.time() 函數擷取到的浮點數傳遞給localtime 類即可。下面是對應的示例:
import time
localtime = time.localtime(time.time())
print(f"目前時間為:{localtime}")
執行結果如下:
當然,也可不傳入指定的秒數,此時會預設擷取目前時間。隻不過傳入時,會擷取指定時間戳對應的日期。下面為不傳時間戳的示例:
import time
print(f"目前時間為:{time.localtime()}")
執行結果為:
3.2.2 擷取正常格式化時間
擷取格式化日期的方式有很多種,最正常的方式是使用asctime() 函數,下面是對應的示例:
import time
localtime = time.asctime(time.localtime(time.time()))
print(f"目前時間為:{localtime}")
執行結果如下:
3.2.3 擷取格式化日期
擷取格式化日期可通過 strftime 方法來實作,下面給出對應的示例:
import time
# 格式化為 2023-01-01 00:00:00 的形式
print(f"目前日期為:{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}")
# 格式化為 Sat Jan 01 00:00:00 2023 的形式
print(f"目前時間為:{time.strftime('%a %b %d %H:%M:%S %Y', time.localtime())}")
# 将格式化字元串轉換為時間戳
t = "Sat Apr 08 09:00:10 2023"
print(f"目前時間對應的時間戳為:{time.mktime(time.strptime(t, '%a %b %d %H:%M:%S %Y'))}")
執行結果如下:
下面來簡單說一下常見的格式化日期符号:
符号 | 含義 |
%y | 兩位數的年份,可選值為00-99 |
%Y | 四位數的年份,可選值為:0000-9999 |
%m | 月份,可選值為:01-12 |
%d | 月内的第一天,可選值為:0-31 |
%H | 24小時制的小時數,可選值為:0-24 |
%I | 12小時制的小時數,可選值為:01-12 |
%M | 分鐘數,可選值為:00-59 |
%S | 秒數,可選值為:00-59 |
%a | 本地簡化的星期名稱 |
%A | 本地完整的月份名稱 |
%b | 本地簡化的月份名稱 |
%B | 本地完整的月份名稱 |
%c | 本地對應的日期表示和時間表示 |
%j | 年内的第幾天,可選值為:001-366 |
%p | 本地的A.M 或 P.M的等價符 |
%U | 一年内的星期數,以星期天為星期的開始,可選值為:00-53 |
%w | 星期内的第幾天,以星期天為開始,可選值為:0-6 |
%W | 一年内的星期數,以星期一為開始,可選值為:00-53 |
%x | 本地對應的日期表示 |
%X | 本地對應的時間表示 |
%Z | 目前時區的名稱 |
%% | %号本身 |
3.2.4 擷取某月的月曆
在 python 中還提供了擷取年曆或月曆的方法。下面給出列印月曆的示例:
import calendar
cal = calendar.month(2023, 4)
print("以下為2023年4月的月曆:")
print(cal)
執行結果如下: