Manchmal benötigt man den Betrag einer Zahl um irgendwelche Berechnungen damit auszuführen. Dies ist natürlich in Python problemlos möglich, eine passende Funktion wird mitgeliefert. Dies ist zwar die einfachste Methode, aber natürlich lässt sich das auch ganz anders lösen, wie die hier vorgestellten aus dem Forum entnommenen Codeschnipsel beweisen.
Methode 1
Die empfohlene Methode ist natürlich die Nutzung von abs():
1 print abs(-12)
2 print abs(10)
Methode 2
Man kann aber auch eine abs()-ähnliche Funktion definieren, zum Beispiel rekursiv und diese dann statt abs() verwenden:
1 def recur_abs(number):
2 if number >= 0:
3 return number
4 else:
5 return recur_abs(-number)
Methode 3
Geht auch mit etwas Mathematik:
1 import math
2
3 def math_abs(x):
4 if x >= 0:
5 return x
6 n = math.sqrt(x ** 2)
7 return abs(type(x)(n))
Methode 4
Eine Lösung über das Maximum von Zahlenreihen ist auch möglich:
1 def range_abs(x):
2 return max(range(x+1) + range(-x+1))
Methode 5
Auch eine String-Lösung ist denkbar:
1 def string_abs(zahl):
2 return float(str(zahl).replace('-',''))
Methode 6
Hier eine Methode mit etwas Java2k Feeling:
1 import random
2
3 def java2k_abs(x):
4 while x < 0:
5 x *= random.choice([-1, 1])
6 return x
Methode 7
Oder doch ein iteratives Verfahren?
1 def betrag(x):
2 y = 1
3 while True:
4 if (x+y)*(x-y) == 0:
5 return y
6 y += 1
Methode 8
In Zeiten von Web 2.0 ist es immer angebracht, den User zu fragen. Die Usermeinung wird nicht geprüft, denn Content ist wichtiger als sinnvolle Information.
1 def web20abs(x):
2 ergebnismenge = [x, x*(-1)]
3 userentscheidung = ""
4 print "Welche Zahl ist größer?"
5 print "Geben Sie [1] für", x, "| [2] für", x*(-1), "ein."
6 while True:
7 if not userentscheidung in [1, 2]:
8 userentscheidung = int(raw_input("?"))
9 else: break
10 return ergebnismenge[userentscheidung - 1]
Methode 9
Ja aber... es gibt doch auch noch die Methode für Liebhaber von Bits und Bytes, so ganz ohne Buchstaben dazwischen. Die "old school"-Methode, speziell zur Benutzung durch Computerjunkies und Hacker, denen langweilig geworden ist. Sie basiert auf Bitoperationen und funktioniert so natürlich nur für den Datentyp int...
1 from sys import maxint
2 def bit_abs(x):
3 return ~x+1 if x|maxint == -1 else x