我想知道是否可以在 Python 3 中做這樣的事情。當然不允許使用 abs()。也不允許導入。
6 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
{1e999: x, -1e999: -x}[x*1e999]
我是認真的。這行得通。
被1e999解釋為浮點數,但它溢出了可用的精度,所以它是inf. 但無窮大可以是正的或負的。通過與無窮大相乘x,我們可以根據其符號將其強制轉換為兩個值之一,而無需使用條件運算符。然后我們可以x從查找表中選擇或否定。
它等效于以下內容,但不需要導入:
from math import inf
{inf: x, -inf: -x}[x*inf]

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
轉換為帶符號的字符串并切掉第一個字符。從__class__
技術上講,它不是一種方法,所以沒有方法。
x.__class__(f'{x:+}'[1:])

米脂
TA貢獻1836條經驗 獲得超3個贊
假設字符串表示的第一個字符是“-”并返回否定。但是當你錯的時候不要否定。
def abs(x):
try:
return {'-': -x}[f'{x}'[0]]
except:
return x

呼如林
TA貢獻1798條經驗 獲得超3個贊
如果您認為內置類(int
,str
等)是內置“函數”。您可以執行以下操作
num.__class__(('%s' % num).lstrip('-'))
將數字轉換為字符串,去掉負號,然后使用原始數字類轉換回來

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
abs()
內置函數只是調用該方法.__abs__()
。沒有導入,沒有內置函數,沒有條件,沒有除法,沒有平方根。沒有abs()
。
x.__abs__()
添加回答
舉報
0/150
提交
取消