Python 3.x python 3-为什么在寻找最大ord()值时for循环不起作用?

Python 3.x python 3-为什么在寻找最大ord()值时for循环不起作用?,python-3.x,Python 3.x,想要获得最大unicode值,但循环只返回第一个字符的uni值 text = "NdžƆΌŮýƤ¨ǿȢÛʉ̣ƍǹƭɴͩˍΒŶØǝƸ͕˛Ǒä¨ØˤΆ˩Ųȇʟϋº" def maxOrd(text): for k in text: k = max(range(ord(k))) return k 循环的无效,因为您只返回0到n-1范围内的最大值,其中n是该字符的ord。请记住,范围不包括最后一个值。您可以通过打印print(列表(范

想要获得最大unicode值,但循环只返回第一个字符的uni值

text = "NdžƆΌŮýƤ¨ǿȢÛʉ̣ƍǹƭɴͩˍΒŶØǝƸ͕˛Ǒä¨ØˤΆ˩Ųȇʟϋº"
def maxOrd(text):
    for k in text:
        k = max(range(ord(k)))
        
    return k

循环的
无效,因为您只返回0到n-1范围内的最大值,其中n是该字符的
ord
。请记住,
范围
不包括最后一个值。您可以通过打印
print(列表(范围(5))
来验证这一点,它只返回0到4,而不是5。然后还计算该范围的
max
,它将始终是该范围内的最后一个值。此外,在循环结束后或到达
text
的最后一个字符后,您可以说
returnmx
。您永远不会真正计算整个文本字符串的最大值。我看到了一个明显的答案,但我想提供另一个解决方案:

text = "ACB"
def maxOrd(text):
    mx = -1
    for k in text:
        mx = max(ord(k), mx)
    
    return mx

print(maxOrd(text)) # output is 67 - letter C

map
将函数应用于iterables。然后,我们只需将
ord
作为函数传递,将
text
作为iterable传递即可。然后,将其包装在
max
中以查找最大值。

为什么有范围?是否需要SD
max(范围(n))==n-1
。。。你的意思是
k=max(ord(char)表示文本中的char)
?沙箱这个q=>正是我需要的,介意解释一下为什么我的代码不起作用吗?谢谢你advance@wylde
range(x)
提供迭代
0
x
iterable
。您试图获得每次迭代的最大值(即x-1)并将其分配给
k
。循环后,k的最后一个值是
范围(ord(last_字母))
-比
ord(last_字母)
小1。非常感谢您,简单但优雅,从未想到过这种方法。没问题,希望能有所帮助!
def max_ord(text):
    return max(map(ord, text))