Ich habe folgende Aufgabe erhalten:
Es soll also aus einer Datei diese Zeichen eingelesen werden. Das habe ich. Auch die Umwandlung in Dezimal und das Addieren. ich scheitere aber am sSchreiben der Datei. Ich erhalte immer:Im Land der Sexteten haben die Bewohner an jeder Hand drei Greifer. Ihr Zahlensystem ist ein Stellenwertsystem wie unser Dezimalsystem, verfügt aber dementsprechend nur über 6 Zeichen, die folgende Werte haben:
Zeichen-Wert
< 0
> 1
* 2
+ 3
( 4
) 5
Wenn eine Sextetenzahl aus mehreren Zeichen besteht, so sind die Stellen wie in unserem Dezimalsystem angeordnet, d.h. die höchstwertige Stelle ganz links und die niedrigstwertige ganz rechts.
Schreiben Sie ein Programm, das die Rechenaufgabe im Sexteten System einliest und eine entsprechende Lösungsdateil erzeugt. Orientieren Sie sich dabei an den Musterdateien. Leerzeichen sind keine gültigen Eingabezeichen.
Zerlegen Sie das Problem in Teilprobleme. Es empfiehlt sich, zunächst (Unter-)Programme zu einzelnen Teilproblemen zu schreiben und zu testen.
Hinweise
Die Zeichen für die Darstellung einer nicht negativen ganzen Zahl im Sexteten-System lassen sich als Reste bei fortgesetzter ganzzahliger Division durch 6 ermitteln.
Für die Zahl 125 ergibt sich die Darstellung +*) wie folgt:
125 / 6 = 20 Rest 5 niedrigstwertige Sexteten-Ziffer: )
20 / 6 = 3 Rest 2 nächst höherwertige Ziffer: *
3 / 6 = 0 Rest 3 nächst höherwertige Ziffer: +
Da der Quotient 0 geworden ist, ist die Konvertierung beendet. Eine Fortführung des Verfahrens würde nur noch führende <-Zeichen ermitteln.
Um umgekehrt den Wert einer Zahl aus ihrer Darstellung im Sexteten-System abzuleiten, geht man die Zeichen von links nach rechts durch. Zu Beginn wird der Wert der Zahl mit 0 initialisiert. Für jedes Zeichen wird der alte Zahlenwert mit 6 multipliziert und dann der Wert des jeweiligen Zeichens addiert. Für die Darstellung +*) ergibt sich:
Zahl ist 0
+ entspricht 3 Zahl wird 0 * 6 + 3 = 3
* entspricht 2 Zahl wird 3 * 6 + 2 = 20
) entspricht 5 Zahl wird 20* 6 + 5 = 125
Ein anderes Verfahren besteht darin jedes Zeichen mit seiner entsprechenden Wertigkeit zu multiplizieren und dann aus den Zahlen die Summe zu bilden.
+ entspricht 3: Zahl wird 3 * 62 = 108
* entspricht 2: Zahl wird 2 * 61 = 12
) entspricht 5: Zahl wird 5 * 60 = 5
Summe: 125
Ist auch Logisch, dass ich das erhalte, es soll aber geordnet aussehen, etwa so:(*)* | 968
*++* | 560
(*<> | 937
>(+) | 383
><<+ | 219
++(+ | 783
+<>< | 654
))< | 210
**) | 89
>*)( | 322
------ | -----
+)(*> | 5125
http://www.directupload.net/file/d/3936 ... lh_png.htm
Wie mache ich das, dass der Text "eingerückt" wird, egal was ich vorher für Zeichen eingebe?
Hier ist mal der Code, den ich bisher habe:
Code: Alles auswählen
def sexToDez(sexlist):
sexteten = {"<": 0, ">": 1, "*": 2, "+": 3, "(": 4, ")": 5}
hex = ""
for i in sexlist:
hex += str(sexteten[i])
list = [i for i in str(hex)]
list.reverse()
count = 0
res = 0
for i in list:
res += (6 ** count) * int(i)
count += 1
count = 0
return res
def dezToSex(dez):
sexteten = {0: "<", 1: ">", 2: "*", 3: "+", 4: "(", 5: ")"}
res = []
sex = ""
while dez > 0:
a = int(dez % 6)
dez = (dez - a) / 6
res.append(a)
res.reverse()
for i in res:
sex += str(sexteten[i])
return sex
sexlst = []
sexlist = []
sexstr = ""
dez = 0
toWrite = ""
try:
f = open("Aufgabe.txt", "r")
except:
print("Es ist ein Fehler aufgetreten, versuchen Sie es erneut")
for line in f:
sexlst = [i for i in str(line)]
for i in range(len(line)):
if sexlst[i] == " " or sexlst[i] == "" or sexlst[i] == "-" or sexlst[i] == "\n":
continue
else:
sexlist.append(sexlst[i])
sexstr = "".join(map(str, sexlist))
toWrite += str(sexstr) + " | " + str(sexToDez(sexstr)) + "\n"
dez += sexToDez(sexstr)
sexlist.clear()
sexstr = dezToSex(dez)
w = open("Loesung.txt", "w")
w.write(toWrite)
w.write("----------\n")
w.write(sexstr + "|" + str(dez))
f.close()
w.close()