divmod()函數也是Python的內置函數之一,其作用是對傳入的兩個數值(不能是復數)做除法運算和求余運算。
Python中divmod()函數的語法格式如下:
divmod(a, b)
該函數有a, b兩個參數,都是數值類型的,包括其它進制的數值,但不能是復數。其中,a是被除數(分子),b是除數(分母)。
該函數的返回值是一個元組,包含a與b兩個數的商及其余數。
對于整型參數,其結果相當于(a // b, a % b);
對于浮點數,其結果是( q, a % b),q通常是math.floor(a / b),但也可能比其小1。在任何情況下,q * a + a % b都非常接近a。如果 a % b是非零值,結果與b的符號相同,同時,0 <= abs(a % b) < abs(b)。
上面敘述中,"//"運算符是求兩個數商的整數部分;math.floor()是下舍取整函數,如math.floor(-35.3) = -36.0,math.floor(23.8) = 23.0;
abs()是求某數絕對值的函數,詳見本站:Python中的abs()函數一文中的相關介紹。
Python divmod()函數用于兩個整數間,返回兩個數的商與余數構成的元組。
#對于整數,輸出包含其商和余數的元組
dm = divmod(13, 5)
print(dm)
#可以使用兩個變量來分別接收其商和余數
x, y = divmod(13, 5)
print(x)
print(y)
其輸出結果如下所示:
(2, 3)
2
3
在Python 3.8.2中運行的結果如下圖所示:
當向函數中傳遞的參數為浮點數時,divmod函數用于兩個符號相同的浮點數時,其使用與整數類似的方式計算其商和余數。但用于異號的兩個浮點數時,其商部分的值是兩個數的商下舍后,再求其余數部分,比如參數取5和-2.3時,其真正的商約是-2.1739,那么使用divmod()函數時,其結果中的商值下舍后為-3,則其余數部分為:5-(-2.3)*(-3) = -1.9,即余數部分的絕對值約為1.9,其符號與除數相同,最終為-1.9。實際上,在Python中divmod(5, -2.3)的輸出結果為:(-3.0, -1.8999999999999995)。
#用于浮點數中
dm1 = divmod(10, 2.5)
print("dm1=", dm1)
dm2 = divmod(13, 3.2)
print("dm2=", dm2)
dm3 = divmod(12.4, 3.2)
print("dm3=", dm3)
dm4 = divmod(12.4, -3.2)
print("dm4=", dm4)
dm5 = divmod(-12.4, 3.2)
print("dm5=", dm5)
dm6 = divmod(-12.4, -3.2)
print("dm6=", dm6)
輸出結果如下:
dm1= (4.0, 0.0)
dm2= (4.0, 0.1999999999999993)
dm3= (3.0, 2.8)
dm4= (-4.0, -0.40000000000000036)
dm5= (-4.0, 0.40000000000000036)
dm6= (3.0, -2.8)
在Python3.8.2中的輸出情形如下圖所示:
上面例子中,因為小數表示的精度問題,輸出結果有令人驚愕的效果。
Python divmod函數也可以用于其它進制中的參數中,同時可以不同進制之間混用。
其輸出結果都是十進制形式。
#用于其它進制
dm7 = divmod(10, 0b110)
print("dm7=", dm7)
dm8 = divmod(0xAF, 0b110)
print("dm8=", dm8)
dm9 = divmod(0xAF, 0O17)
print("dm9=", dm9)
輸出結果如下:
dm7= (1, 4)
dm8= (29, 1)
dm9= (11, 10)
在上面說過,Python中的divmod()函數不能使用于復數;從常識的角度來講,第二個參數不能為0.下面使用例子來說明這些情況下的輸出情況。
#一些異常情況
print(divmod(3 + 4j, 2))
print(divmod(9 + 5j, 4 + 2j))
print(divmod(11, 0))
print(divmod((5,4),(3,3)))
以上三個例子分別執行時,前兩個報錯的異常信息相同,即TypeError: can't take floor or mod of complex number.
第3個執行時的異常信息為:ZeroDivisionError: integer division or modulo by zero.
第4個執行時的異常信息為:TypeError: unsupported operand type(s) for divmod(): 'tuple' and 'tuple'.
以上是關于Python divmod函數在各種情況下的執行情況。
新聞熱點
疑難解答