Python integer zerlegen?
Hallo,
gibt es in Python eine einfache Möglichkeit einen integer in seine einzelnen Zahlen zu zerlegen?
Als Beispiel:
a = 123
soll zerlegt werden in: b = 1 c= 2 d = 3
Wenn möglich soll das ganze geschehen ohne, dass der int-Wert in einen string umgewandelt wird.
3 Antworten
Denk einmal daran, wie das Dezimalsystem funktioniert.
Z.b. 123 mod 10 = 3
abrunden(123 / 10) = 12
Offenbar geht's dir um die Zifferndarstellung zu verschiedenen Basen. Ich kenne keine fertigen Funktionen, aber mit "divmod()" geht's ganz billig:
#!/usr/bin/env python
from __future__ import print_function
def digits ( number, base ):
"Zahl in Ziffern (0..base-1) zerlegen."
result = []
while number:
number, digit = divmod( number, base )
result.insert( 0, digit )
return result
def toString ( digit_list ):
"Ziffernliste in druckbare Zeichen wandeln."
numerals = '0123456789' \
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \
'abcdefghijklmnopqrstuvwxyz'
return ''.join(numerals[c] for c in digit_list) or numerals[0]
for n in (9, 10, 35, 36, 49, 64, 100, 0 ):
print( "\n%4d"%(n,), end='' )
for b in ( 2, 16, 50 ):
print( " =%8s/%d" % (toString(digits(n,b)), b), end='' )
Der Code sollte mit Python 2 und 3 laufen. Du kannst ja mal damit rumspielen.
Siehe Polygammas Antwort.
Was genau spricht denn gegen die Umwandlung zu string?
[int(i) for i in str(123)] // [1, 2, 3]
Meine Fragestellung war leider blödsinn. Der Eingabewert ist eine Zahl in einer beliebigen Basis, die kleiner als 62 sein soll.
Die Zahlen in der Basis 62 bestehen aus 0-9, A-Z und a-z, wobei z der 61 entspricht. Also ist der Eingabewert ein string und kein int-Wert.
Die Zerlegung von einem string ist ja mit der list()-Funktion kein Problem.
Aber weißt du wie ich an die einzelnen Elemente in der Funktion
herankomme?
So ganz verstehe ich das Problem noch nicht. Brauchst du die einzelnen "Elemente" in Base 62 oder in Base 10?
Das kommt auf die Eingabe an.
Als Beispiel:
Es wird die Zahl A2 zur Basis 62 eingegeben.
Jetzt möchte ich an die Elemente A und 2 einzeln herankommen und ihnen Zahlenwerte zuordnen, falls es noch keine Dezimalzahlen sind.
Dem A soll die Dezimalzahl 10 zugeordnet werden und mit der zwei passiert nichts.
Hm, "A2" entspricht doch "2234" bzw "622" (je nachdem wo man die Groß´/Klein-Buchstaben setzt) in Base 10 oder? Ich verstehe jetzt nicht ganz welchen Sinn es dann macht dem "A" die "10" zuzuordnen. Mal abgesehen davon brauchst du doch eigentlich nur jedes Element des Eingabe-Strings durchlaufen und in Base 10 dekodieren.
Ich mische mich mal hier ein ;)
Magst du nicht einfach mal die Aufgabenstellung im Originalwortlaut angeben?
Ich möchte dem A die 10 zuordnen, um es nach dem Horner Schema umrechnen zu können. A ist das zehnte Zeichen, also ergibt sich Dezimahl A2 = 2*62⁰ + 10*62¹ = 622 .
Die Aufgabenstellung lautet:
In dieser Aufgabe soll eine
gegebene Zahl, die bezüuglich einer Basis B1
dargestellt ist in einer anderen Basis B2 dargestellt werden. Dabei ist 2<= B1,B2 <= 62 .
Eingabe:
Die Zeichenkette "zahl" wird zusammen mit zwei ganzzahligen Variablen übergeben. Dabei soll "zahl" als Zahl in der Darstellung bezüglich "basis" interpretiert werden. Geschrieben werden soll eine Funktion konvertiere(zahl,basis,neue_basis) .
Ausgabe:
Ausgegeben werden soll eine Zeichenkette, die die gegebene "zahl" bezüglich der Basis neue_basis darstellt.
Mein Hintergedanke ist die eingegebene Zahl erstmal ins Dezimalsystem umzurechnen und dann in die neue Basis B2.
Tipp: Erstelle dir einfach eine "passende" Liste...
dieliste = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', ...]
Dann gilt z.B.
dieliste[10] = 'A'
und auch dieliste.index('A') = 10
PS: Die Liste kann gut wie folgt erzeugt werden:
import string
dieliste = []
dieliste.extend(list(string.digits))
dieliste.extend(list(string.ascii_uppercase))
dieliste.extend(list(string.ascii_lowercase))
Sowas wie dieliste.index('A') = 10 hab ich gebraucht. Besten Dank!
Zehnstein weniger Neunstein =
Ich halt mich hier lieber raus.........so ganz ohne Taschenrechner - LOL