Diese Seite zeigt kurze python-snippets zu verschiedenen Themen.
Die Beispiele wenden sich an Einsteiger im Bereich python.
Binäre Suche
#!/usr/bin/env python3
import sys
# binary search of a given number in range(0..1000)
# the number of tries is limited to O(log n)
def newTp(ug, og):
return int((ug + og) / 2)
while True:
xi = input("Zahl (0..999)? ")
if xi == 'q':
sys.exit(0)
x = int(xi)
if x < 0 or x > 999:
print("Zahl ungültig.")
continue
ug = 0
og = 1000
tp = newTp(ug, og)
n = 0
while True:
n += 1
if n > 33:
break
if tp == x:
print("%d.-Versuch, ug=%d, tp=%d, og=%d, Bingo, die Zahl ist %d" %(n, ug, tp, og, tp))
break
elif x < tp:
print("%d.-Versuch, ug=%d, tp=%d, og=%d, die Zahl ist kleiner als %d" %(n, ug, tp, og, tp))
og = tp
tp = newTp(ug, og)
elif x > tp:
print("%d.-Versuch, ug=%d, tp=%d, og=%d, die Zahl ist größer als %d" %(n, ug, tp, og, tp))
ug = tp
tp = newTp(ug, og)
|
python$ ./binary.py
Zahl (0..999)? 246
1.-Versuch, ug=0, tp=500, og=1000, die Zahl ist kleiner als 500
2.-Versuch, ug=0, tp=250, og=500, die Zahl ist kleiner als 250
3.-Versuch, ug=0, tp=125, og=250, die Zahl ist größer als 125
4.-Versuch, ug=125, tp=187, og=250, die Zahl ist größer als 187
5.-Versuch, ug=187, tp=218, og=250, die Zahl ist größer als 218
6.-Versuch, ug=218, tp=234, og=250, die Zahl ist größer als 234
7.-Versuch, ug=234, tp=242, og=250, die Zahl ist größer als 242
8.-Versuch, ug=242, tp=246, og=250, Bingo, die Zahl ist 246
|
Fibonacci Zahlen
#!/usr/bin/env python3
import sys
# fib.py: calculate the fibonacci number of n, which may be given as first arg.
# if n is not given, the literal default is 7.
# if a second arg is given, the output gets a bid verbose
n = 7
if len(sys.argv) > 1:
n = int(sys.argv[1])
results = {}
calls = 0
def fib(n):
global calls
calls += 1
if n == 0:
return 0
elif n == 1 or n == 2:
return 1
fib_n = fib(n - 1) + fib(n - 2)
global results
results[n] = fib_n
return fib_n
if __name__ == "__main__":
print("fib (%d) = %d, #calls = %d" % (n, fib(n), calls))
if len(sys.argv) > 2:
print()
print("fib (1) = 1")
print("fib (2) = 1")
for i in sorted(results):
print("fib (%d) = %d" % (i, results[i]))
|
python3 ./fib.py 14 v
fib (14) = 377, #calls = 753
fib (1) = 1
fib (2) = 1
fib (3) = 2
fib (4) = 3
fib (5) = 5
fib (6) = 8
fib (7) = 13
fib (8) = 21
fib (9) = 34
fib (10) = 55
fib (11) = 89
fib (12) = 144
fib (13) = 233
fib (14) = 377
|
Aufruf: python3 fib.px 14 v
Berechnet die Fibonacci-Zahl von 14, ist wg. zweitem Argument etwas schwatzhaft.
Bei der rekursiven Lösung zeigt sich gleich der gigantische Aufwand an Funktionsaufrufen. Hier bleibt einiges an Optiomierungs-Potential.
|