簡體   English   中英

Python回合用'n // 1`

[英]Python round with `n // 1`

我想知道是否有任何理由不使用//運算符將數字舍入為整數。 我在這個主題上看不多,或者真的知道要找什么來了解更多。

>>> from random import random
>>> random() * 20 // 1
1.0
>>> random() * 20 // 1
0.0
>>> random() * 20 // 1
16.0
>>> random() * 20 // 1
11.0
>>> random() * 20 // 1
0.0

除了需要在結果中加1(不得到1-20而不是0-19的范圍)或者這個實際結果是否在0-20范圍內?

不使用它的主要原因是有完美的內置函數intround已經做到這一點,這可能是有效的,並且不會混淆讀取代碼的人。

注釋中指出的另一個原因是//1等同於math.floor而不是intround -2.5 // 1返回浮點-3.0int(-2.5)返回整數-2

有經驗的程序員可能會對//1所做的事情感到困惑,這很好地說明了為什么使用為此目的設計的現有功能之一更好 - 它們的行為方式明確,記錄和一致。

不使用//將隨機浮點數轉換為隨機int的原因是因為您可以直接跳轉到隨機int:

>>> import random
>>> random.random()      # [0.0, 1.0)
0.4399641241469895
>>> random.uniform(0,20) # [0.0, 20.0)
11.494311814130072
>>> random.randint(0,20) # [0, 20) or [0, 19]
7

要回答你的問題: x // y執行x乘以y的底部除法,因此結果將始終向下舍入。 要舍入到最接近的整數:

>>> x = 1.7
>>> x // 1
1.0
>>> int(x)
1
>>> (x + 0.5) // 1
2.0
>>> int(x + 0.5)
2
>>> round(x)
2.0
>>> int(round(x))
2

在轉換為int之前添加0.5(或減去負數)與round(x) (內置)相同。 值得注意的是, x // 1向下舍入,但int(x)向下舍入為零。

random.random() * 20 // 1不可能返回20,因為隨機是半開。 random.uniform(0,20) // 1然而,可以返回20,但發生這種情況的幾率接近於零。

好吧, //不會對整數進行舍入。 Round表示返回最接近的整數,但請檢查:

print round(1.9)     # 2.0
print 1.9 // 1       # 1.0

它給你的范圍是0-19//實際上是地板分區仍然產生一個浮點數但我讀到這就是你想說的。

不使用的可能原因可能是// 1不是用於表達它的非常簡潔的語法。 Python非常關注可讀性,這種語法對它的作用並不十分明顯。 這就像JavaScript的~~x技巧。

如果我要查看這段代碼 ,我會懷疑是第一個錯誤,第二個是功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM