leere Liste füllen

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
Immortalmemo
User
Beiträge: 13
Registriert: Mittwoch 22. Oktober 2014, 00:02
Wohnort: Berlin

Hallo,

ich sitze zur Zeit an einer Aufgabe in der ich eine Zahl x in einer Basis b darstellen möchte.

d.h. Eingabe: natürliche Zahl x und Basis b (getrennt durch Leerzeichen)
wobei b als Zeichenkette aus mindestens zwei Zeichen 'a-z','A-Z','0-9' gegeben.

Ausgabe: eine einzelne Zeile in der x in der Basis b dargestellt ist.

Code: Alles auswählen

#!/usr/bin/env python3

from sys import stdin

for line in stdin:
 	x,b=(int(word) for word in line.split())	
	while x > 0:
		l=[]			
		xi=x%b
		x=x/b
		l.append(xi)
	print(l)
Nun hab ich versucht meinen Code auszuführen und kriege für while i>: inconsistent use of tabs. Hab es anders eingerückt etc. aber immer wieder dieser Error.

Und es wäre nett, falls mir jemand bestätigen könnte, dass mein Algorithmus zur Berechnung korrekt ist.

Meine Idee war es halt eine leere Liste zu initialisieren und diese nach und nach zu füllen mit dem Rest (also x modulo b)

PS: In der Vorlesung hat man uns bisher noch nicht viel gezeigt. Daher ist mein Code sicher nicht die optimalste Lösung.^^
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du darfst bei der Einrückung Tabs und Leerzeichen nicht vermischen und musst dich für das eine oder das andere entscheiden. Andernfalls handelst du dir unschöne Probleme ein. Vorzugsweise solltest du nur Leerzeichen verwenden, vier Stück pro Einrückungsebene. Stelle deinen Editor am besten so um, dass er aus Tabs automatisch Leerzeichen macht.

Zu deinem Fehler: Schau dir mal deine Einrückung in Zeile 6 genau an. Jedes Zeichen.
Das Leben ist wie ein Tennisball.
Immortalmemo
User
Beiträge: 13
Registriert: Mittwoch 22. Oktober 2014, 00:02
Wohnort: Berlin

Ok ich habs zum laufen gebracht wenigstens.
Allerdings rechnet es nicht das aus was ich will und Ausgabe steht in eckigen Klammern. Ich kriege für beliebiges x und b immer [5e-324].

Einen leeren String kann ich doch auch initialisieren oder?

Mit

Code: Alles auswählen

string=""



"xi".join(string)
? und am Ende zusammenführen.

Aber ich glaube mein Algorithmus zur Berechnung klappt so nicht :/
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Denk doch mal drüber nach, was in Zeile 8 passiert.

Ansonsten hast du noch ein Problem mit der Division. Du möchtest eine ganzzahlige Division durchführen, das geht mittels //. also

Code: Alles auswählen

x = x // b
Da Division und Modulo-Operator aber häufig zusammenfallen, geht das ganze auch einfacher:

Code: Alles auswählen

x, xi = divmod(x, b)
Das Leben ist wie ein Tennisball.
Antworten