Python integer zerlegen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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]

fragexaxaxa 
Fragesteller
 12.11.2016, 00:01

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?


0
Dory1  12.11.2016, 00:24
@fragexaxaxa

So ganz verstehe ich das Problem noch nicht. Brauchst du die einzelnen "Elemente" in Base 62 oder in Base 10?

0
fragexaxaxa 
Fragesteller
 12.11.2016, 01:18
@Dory1

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.

0
Dory1  12.11.2016, 01:23
@fragexaxaxa

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.

0
polygamma  12.11.2016, 01:24
@fragexaxaxa

Ich mische mich mal hier ein ;)

Magst du nicht einfach mal die Aufgabenstellung im Originalwortlaut angeben?

1
fragexaxaxa 
Fragesteller
 12.11.2016, 04:49
@polygamma

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.

0
fragexaxaxa 
Fragesteller
 12.11.2016, 04:52
@fragexaxaxa

Mein Hintergedanke ist die eingegebene Zahl erstmal ins Dezimalsystem umzurechnen und dann in die neue Basis B2.

0
polygamma  12.11.2016, 05:05
@fragexaxaxa

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

1
polygamma  12.11.2016, 05:52
@polygamma

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))
1
fragexaxaxa 
Fragesteller
 12.11.2016, 15:38
@polygamma

Sowas wie dieliste.index('A') = 10 hab ich gebraucht. Besten Dank!

0