Răsfoiți Sursa

improve `max` and `min`

BLUELOVETH 2 ani în urmă
părinte
comite
b3cbb121a4
1 a modificat fișierele cu 32 adăugiri și 4 ștergeri
  1. 32 4
      python/builtins.py

+ 32 - 4
python/builtins.py

@@ -16,11 +16,39 @@ def round(x, ndigits=0):
 def abs(x):
 def abs(x):
     return -x if x < 0 else x
     return -x if x < 0 else x
 
 
-def max(a, b):
-    return a if a > b else b
+def max(*args):
+    if len(args) == 0:
+        raise TypeError('max expected 1 arguments, got 0')
+    if len(args) == 1:
+        args = args[0]
+    args = iter(args)
+    res = next(args)
+    if res is StopIteration:
+        raise ValueError('max() arg is an empty sequence')
+    while True:
+        i = next(args)
+        if i is StopIteration:
+            break
+        if i > res:
+            res = i
+    return res
 
 
-def min(a, b):
-    return a if a < b else b
+def min(*args):
+    if len(args) == 0:
+        raise TypeError('min expected 1 arguments, got 0')
+    if len(args) == 1:
+        args = args[0]
+    args = iter(args)
+    res = next(args)
+    if res is StopIteration:
+        raise ValueError('min() arg is an empty sequence')
+    while True:
+        i = next(args)
+        if i is StopIteration:
+            break
+        if i < res:
+            res = i
+    return res
 
 
 def all(iterable):
 def all(iterable):
     for i in iterable:
     for i in iterable: