Merkwürdiges Verhalten einer eigenen Funktion
Verfasst: Samstag 6. Dezember 2014, 19:09
Hallo allerseits,
ich habe heute mit dem Python-Programmieren angefangen. Dies ist meine erste "eigene" Funktion (eigentlich habe ich sie hier http://code.activestate.com/recipes/652 ... se-number/ geklaut).
So schaut sie aus:
Ich verwende sie in folgendem Skript:
Führe ich dieses Skript in der BASH aus, erhalte ich folgenden Output (für: "markus@theseus ~ $ Software/EigeneProgramme/uniodate.py 6.12.2014")
Wenn ich die Pythonkonsole öffne, und das Skript Zeile für Zeile ausführen lasse, rechnet "base10to12()" Zahlen korrekt um.
Was mache ich hier falsch?
Viele Grüße und besten Dank im Voraus,
Markus
ich habe heute mit dem Python-Programmieren angefangen. Dies ist meine erste "eigene" Funktion (eigentlich habe ich sie hier http://code.activestate.com/recipes/652 ... se-number/ geklaut).
So schaut sie aus:
Code: Alles auswählen
def base10to12(zahl):
try:
zahl = int(zahl)
except:
return ""
#
ziffernliste={10:'z', 11:'e'} # Festlegen von Zeichen für die Ziffern "zehn"
# und "elf".
ausgabe='' # Anelgen einer neuen Ausgabevariable.
aktuelle_zahl=zahl # Zunächst soll die übergebene Zahl "aktuell" bearbeitet
# werden.
while aktuelle_zahl!=0: # So lange die aktuell zu bearbeitende Zahl nicht
# Null ist…
rest=(aktuelle_zahl%12) # Bilde den Rest bei Teilung durch 12. Als mögliche
# Ergebnisse kommen alle Zahlen von 1 bis 11 infrage.
if 12>rest>9: # Gleichbedeutend mit: "Wenn rest 10 oder 11 ist."
restziffer=ziffernliste[rest] # Ziehe das Zahlensymbol aus der
# ziffernliste.
else: # Ansonsten …
restziffer=str(rest) # … mache einfach einen String aus der Restziffer.
ausgabe=restziffer+ausgabe # Hänge die gerade bestimmte Ziffer an den
# Ergebnisstring.
aktuelle_zahl=aktuelle_zahl/12 # Führe eine erneute Teilung durch.
return ausgabeCode: Alles auswählen
#!/usr/bin/env python3
# coding: utf8
#
#
#
### Vorarbeit ###
from datetime import datetime
from math import floor
#
#
## Einlesen der Funktionsdatei ##
import sys # Das sys-Modul stellt Informationen in Konstanten, Funktionen und
# Methoden über den Python-Interpreter zur Verfügung.
sys.path.append("/usr/local/lib/") # Hänge mein eigenes Libraryverzeichnis an.
from func import base10to12 # Importiere von dort aus die benötigte Funktion.
#
#
## Testen ob ein Datum übergeben wurde ##
#TODO
#
#
## Berechnung der Differenz ##
#TODO: Schutzfunktion, falls dem Skript kein korrektes Datumsformat übergeben
# wurde.
d1 = datetime.strptime(sys.argv[1], "%d.%m.%Y") # Datum aus übergebenem
# Argument auslesen.
d2 = datetime.strptime("10.09.2007", "%d.%m.%Y") # "Stunde Null" des
# Unionskalenders.
diff=(d1 - d2).days # Eigentliche Differenzberechnung.
#
#
## Umrechnung uns Unionsformat ##
union_jahr=floor(diff/360)
union_tag=diff%360
print(union_jahr)
print(union_tag)
print(base10to12(union_jahr))
print(base10to12(union_tag))Code: Alles auswählen
7
124
1e-3231.5e-3221.774e-3212.1294e-3202.55536e-3193.066413e-3183.679694e-3174.41563276e-3165.29875933e-3156.3585111933e-3147.6302134322e-3139.156256118647e-3121.0987507342379e-3101.31850088108546e-3091.582201057302556e-3081.898641268763067e-3072.2783695225156803e-3062.7340434270188164e-3053.2808521124225797e-3043.937022534907096e-3034.724427041888515e-3025.6693124502662176e-3016.803174940319461e-3008.163809928383353e-2999.796571914060024e-2981.1755886296872028e-2961.4107063556246434e-2951.692847626749572e-2942.0314171520994866e-2932.437700582519384e-2922.9252406990232606e-2913.510288838827913e-2904.2123466065934955e-2895.054815927912195e-2886.065779113494634e-2877.278934936193561e-2868.734721923432273e-2851.0481666308118728e-2831.2577999569742473e-2821.509359948369097e-2811.8112319380429164e-2802.1734783256514997e-2792.6081739907817997e-2783.1298087889381596e-2773.755770546725791e-2764.506924656070949e-2755.408309587285139e-2746.489971504742166e-2737.7879658056906e-2729.34555896682872e-2711.1214670760194463e-2691.3457604912233356e-2681.6149125894680027e-2671.9378951073616033e-2662.325474128833924e-2652.7905689546007087e-2643.3486827455208505e-2634.0184192946250206e-2624.822103153550025e-2615.786523784260029e-2606.943828541112035e-2598.332594249334443e-2589.999113099201332e-2571.1998935719041598e-2551.4398722862849918e-2541.7278467435419902e-2532.0734160922503882e-2522.4880993107004657e-2512.985719172840559e-2503.582863007408671e-2494.299435608890405e-2485.1593227306684866e-2476.191187276802184e-2467.429424732162621e-2458.915309678595145e-2441.0698371614314174e-2421.283804593717701e-2411.5405655124612413e-2401.8486786149534894e-2392.2184143379441872e-2382.6620972055330247e-2373.19451664663963e-2363.8334199759675556e-2354.600103971161067e-2345.52012476539328e-2336.624149718471936e-2327.948979662166323e-2319.538775594599587e-2301.1446530713519505e-2281.3735836856223407e-2271.6483004227468088e-2261.9779605072961706e-2252.3735526087554047e-2242.848263130506486e-2233.417915756607783e-2224.101498907929339e-2214.921798689515207e-2205.906158427418249e-2197.087390112901899e-2188.504868135482279e-2171.0205841762578735e-2151.2247010115094482e-2141.4696412138113379e-2131.7635694565736054e-2122.1162833478883265e-2112.5395400174659917e-2103.04744802095919e-2093.656937625151028e-2084.3883251501812336e-2075.26599018021748e-2066.319188216260976e-2057.58302585951317e-2049.099631031415805e-2031.0919557237698967e-2011.310346868523876e-2001.572416242228651e-1991.886899490674381e-1982.2642793888092573e-1972.717135266571109e-1963.2605623198853307e-1953.912674783862397e-1944.695209740634876e-1935.634251688761851e-1926.761102026514221e-1918.113322431817065e-1909.735986918180478e-1891.1683184301816572e-1871.4019821162179886e-1861.6823785394615862e-1852.0188542473539036e-1842.4226250968246844e-1832.907150116189621e-1823.488580139427545e-1814.186296167313054e-1805.0235554007756646e-1796.028266480930797e-1787.2339197771169565e-1778.680703732540348e-1761.0416844479048418e-1741.25002133748581e-1731.500025604982972e-1721.8000307259795665e-1712.16003687117548e-1702.5920442454105757e-1693.1104530944926907e-1683.732543713391229e-1674.479052456069474e-1665.374862947283369e-1656.449835536740043e-1647.739802644088052e-1639.287763172905662e-1621.1145315807486793e-1601.3374378968984152e-1591.6049254762780983e-1581.9259105715337178e-1572.3110926858404613e-1562.7733112230085534e-1553.327973467610264e-1543.9935681611323167e-1534.79228179335878e-1525.7507381520305355e-1516.900885782436643e-1508.281062938923971e-1499.937275526708766e-1481.192473063205052e-1461.4309676758460622e-1451.7171612110152746e-1442.0605934532183294e-1432.4727121438619955e-1422.9672545726343945e-1413.5607054871612737e-1404.272846584593528e-1395.127415901512234e-1386.152899081814681e-1377.383478898177617e-1368.86017467781314e-1351.0632209613375768e-1331.2758651536050922e-1321.5310381843261107e-1311.8372458211913327e-1302.2046949854295992e-1292.645633982515519e-1283.174760779018623e-1273.809712934822348e-1264.5716555217868176e-1255.485986626144181e-1246.583183951373017e-1237.899820741647621e-1229.479784889977146e-1211.1375741867972576e-1191.365089024156709e-1181.6381068289880507e-1171.9657281947856607e-1162.358873833742793e-1152.8306486004913518e-1143.396778320589622e-1134.0761339847075467e-1124.891360781649056e-1115.869632937978868e-1107.043559525574641e-1098.45227143068957e-1081.0142725716827484e-1061.217127086019298e-1051.4605525032231576e-1041.7526630038677892e-1032.103195604641347e-1022.5238347255696165e-1013.0286016706835396e-1003.6343220048202477e-994.361186405784297e-985.233423686941156e-976.2801084243293876e-967.536130109195265e-959.043356131034318e-941.0852027357241181e-921.3022432828689417e-911.56269193944273e-901.875230327331276e-892.250276392797531e-882.7003316713570375e-873.240398005628445e-863.888477606754134e-854.666173128104961e-845.5994077537259536e-836.719289304471144e-828.063147165365372e-819.675776598438447e-801.1610931918126136e-781.3933118301751363e-771.6719741962101636e-762.0063690354521961e-752.4076428425426353e-742.8891714110511623e-733.4670056932613945e-724.160406831913673e-714.992488198296408e-705.990985837955689e-697.189183005546827e-688.627019606656192e-671.0352423527987431e-651.2422908233584918e-641.4907489880301902e-631.788898785636228e-622.1466785427634737e-612.5760142513161686e-603.0912171015794023e-593.7094605218952826e-584.451352626274339e-575.341623151529207e-566.409947781835048e-557.691937338202058e-549.230324805842469e-531.1076389767010962e-511.3291667720413155e-501.5950001264495786e-491.9140001517394944e-482.2968001820873933e-472.7561602185048722e-463.307392262205847e-453.9688707146470164e-444.76264485757642e-435.715173829091704e-426.858208594910044e-418.229850313892053e-409.875820376670465e-391.1850984452004558e-371.422118134240547e-361.7065417610886565e-352.0478501133063877e-342.457420135967665e-332.948904163161198e-323.5386849957934376e-314.246421994952125e-305.09570639394255e-296.11484767273106e-287.337817207277272e-278.805380648732725e-261.056645677847927e-241.2679748134175124e-231.521569776101015e-221.825883731321218e-212.1910604775854615e-202.6292725731025537e-193.1551270877230642e-183.786152505267677e-174.543383006321213e-165.452059607585455e-156.542471529102546e-147.850965834923055e-139.421159001907666e-121.13053908022892e-101.356646896274704e-091.6279762755296448e-081.9535715306355737e-072.3442858367626884e-062.813143004115226e-050.000337577160493827140.0040509259259259260.048611111111111110.58333333333333347
Traceback (most recent call last):
File "Software/EigeneProgramme/uniodate.py", line 38, in <module>
print(base10to12(union_tag))
File "/usr/local/lib/func.py", line 25, in base10to12
restziffer=ziffernliste[rest] # Ziehe das Zahlensymbol aus der
KeyError: 10.333333333333334Was mache ich hier falsch?
Viele Grüße und besten Dank im Voraus,
Markus