Seite 1 von 1

leere Liste füllen

Verfasst: Freitag 24. Oktober 2014, 22:52
von Immortalmemo
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.^^

Re: leere Liste füllen

Verfasst: Freitag 24. Oktober 2014, 23:00
von EyDu
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.

Re: leere Liste füllen

Verfasst: Freitag 24. Oktober 2014, 23:25
von Immortalmemo
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 :/

Re: leere Liste füllen

Verfasst: Freitag 24. Oktober 2014, 23:45
von EyDu
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)