Vom String zu Zahl

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
memocan32
User
Beiträge: 4
Registriert: Dienstag 26. April 2016, 12:41

Hey Leute,

habe folgendes Problem:
Ich habe ein String b = 11-, 001.
Ich würde gerne dies als Zahl haben der Form a = 11- und c = 001, wobei bei einem "-" es keine Rolle spielt ob dort eine 1 oder 0 steht (am besten wäre es wenn ich dann sowas hab wie a1 = 110 und a2 = 111)

Ich habe dazu auch schon ein Programm geschrieben, wobei allerdings nicht das erwünschte Ergebnis heraus kommt.

Code: Alles auswählen

lines = [line.rstrip('\n') for line in b]

dictList = []
new = True

for line in lines:
	if len(line) > 0:
		if new:
			dictList.append({})
			new = False

		splits = line.split(',')
		dictList[-1][splits[0] + ''] = splits[0].strip()
	else:
		new = True

for d in dictList:
	print(d)
Wäre super wenn ihr mir Tipps dazu geben könntet.

Gruß
memocan32
BlackJack

@memocan32: Häh? Das ist alles sehr verwirrend beschrieben. Erst hast Du `a` und `c` dann `a1` und `a2` als Ergebnisnamen, wobei ich nicht sehe wo der `a2`-Wert herkommen soll wenn die Eingabe das gezeigte `b` ist. (Wobei `b` im Quelltext dann wieder etwas ganz anderes zu sein scheint.)

Was soll das addieren einer leeren Zeichenkette bewirken?

Eine Abbildung von einem Wert auf den gleichen Wert abzüglich umschliessendem Whitespace erscheint mir nicht sinnvoll, und hat auch so gar nichts mit der Problembeschreibung zu tun.

Die Namen in dem Quelltext sind schlecht gewählt. Und wenn ich mir den Quelltext so anschaue und Vermutungen anstelle was der am Ende vielleicht machen soll, dann würde ich sagen der ist falsch, weil sehr ungünstig, strukturiert. Zerleg das Problem in Teilprobleme und löse die in kleinen übersichtlichen Funktionen. Wenn ich das richtig sehe braucht man eine Funktion um die Eingabe in Blöcke von Zeilen zu zerlegen die an Leerzeilen getrennt sind. Dann eine Funktion die einen Block in ein Wörterbuch umwandelt. Die kann man dann in einer Schleife auf die Blöcke anwenden. Und die Funktion die einen Block in ein Wörterbuch umwandelt, könnte prima auf eine Funktion zurückgreifen die eine Zeile in ein Tupel aus Schlüssel und Wert zerlegt.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@memocan32
Deine Beschreibung verwirrt ein wenig… Vielleicht hilft Dir ja die `replace`-Methode weiter:

Code: Alles auswählen

>>> int('11-'.replace('-', '0'))
110
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Code: Alles auswählen

>>> data = '11-, 001'
>>> data = data.replace('-', '0')
>>> data
'110, 001'
>>> data.split(',')
['110', ' 001']
>>> tuple(map(int, data.split(',')))
(110, 1)
memocan32
User
Beiträge: 4
Registriert: Dienstag 26. April 2016, 12:41

Hey Leute,

ich versuche das Problem etwas verständlicher zu erklären:

Ich habe ein String S = '11-, 001'
Dies würde ich gerne als Zahl abspeichern, wobei statt dem '-' entweder die Zahl 0 oder 1 erscheinen soll.
Da ist die Idee mit replace sehr gut.

Somit würde aus dem ursprünglichen String S='11-, 001' der neue String S = '111, 001' entstehen.
Jetzt würde ich gerne den neuen String als Zahl abspeichern wollen, sodass ich auf die Zahlen zugreifen kann.
Also soll aus dem neuen String S einmal eine Variable1 = 111 und einmal eine Variable2 = 001 entstehen, wobei bei Variable2 die 0 stehen bleiben sollen.

@/me hat das quasi schon so wie es sein soll, nur das ich statt der Ausgabe (110, 1) lieber es folgender maßen hätte:
Variable1 = 110
Variable2 = 001
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

memocan32 hat geschrieben: @/me hat das quasi schon so wie es sein soll, nur das ich statt der Ausgabe (110, 1) lieber es folgender maßen hätte:
Variable1 = 110
Variable2 = 001
Zahlen mit führenden Nullen gibt es nicht (abgesehen von 0x für Oktal). Wenn Du die sichtbare Ausgabe von 1 als '001' haben möchtest, dann musst Du die Zahl wieder in einen entsprechend formatierten String konvertieren.
Antworten