我想知道是否可以在 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
提交
取消