Python :: Aufgabe #144 :: Lösung #2

5 Lösungen Lösungen öffentlich
#144

Funktion über eine Natürliche Zahl

Anfänger - Python von hollst - 20.02.2017 um 09:02 Uhr
Man schreibe ein Funktion f(n) mit dem Definitionsbereich (n) und dem Wertebereich (f(n)) der natürlichen Zahlen.

Die Funktion f(n) sei wie folgt zu konstruieren:

1.) Schreibe die Zahlen 1 ... n in absteigender Reihenfolge nebeneinander: n, n - 1, n - 2 ... 5, 4, 3, 2, 1
2.) Wandle diese Zahlen in ihre binärer Darstellen ohne führende Nullen: n, n - 1, n -2 ... 101, 100, 11, 10, 1
3.) Entferne jetzt das Komma zwischen den Binärzahlen, die sich damit ergebende neue Binärzahl ist f(n).

Beispiel: f(6) => 6, 5, 4, 3, 2, 1 => 110, 101, 100, 11, 10, 1 => 11010110011101 = 13725 (dezimal).

Fragen: Welchen Wert hat f(99)?

#2
2 Kommentare
vote_ok
von ZRX88 (2770 Punkte) - 05.03.2017 um 13:07 Uhr
Quellcode ausblenden Python-Code
import math


def to_binary(zahl):
    result_string = ''
    result = [0 for _ in range(11)]
    binaries = [math.pow(2, i) for i in range(11)]
 
    for i in range(10,-1,-1):
        if binaries[i] <= zahl:
            zahl -= binaries[i]
            result[i] = 1 
    
    x= False 
    for i in range(10,-1,-1):
        if result[i] == 1:
            x = True
        if x:
            result_string += str(result[i])
    
    return result_string

def from_binary(binary):
    x, zahl =len(binary), 0
    y = [i for i in binary]
    for i in range(x-1,-1,-1):
        zahl += int(y[i])* math.pow(2,x-i-1)
    return zahl

def run(zahl):
    result_strings = ''
    while zahl > 0:
        result_strings += to_binary(zahl)
        zahl -= 1
    print(from_binary(result_strings))
    
run(99)

Kommentare:

Nachbar

Punkte: 2820

30 Aufgaben
67 Lösungen
44 Kommentare

#1
21.09.2017 um 19:21 Uhr
Ab der Zahl 159 gibt´s einen Overflow Error:

Zitat:

OverflowError: math range error


Ohne "math.pow" funzt es:

alt:
Quellcode ausblenden Python-Code
zahl += int(y[i])* math.pow(2,x-i-1)


neu:
Quellcode ausblenden Python-Code
zahl += int(y[i]) * (2 ** (x-i-1))



post_arrow
486 0

ZRX88

Punkte: 2770

50 Aufgaben
45 Lösungen
10 Kommentare

#2
21.09.2017 um 20:11 Uhr
Vielen Dank für den Tipp!

Das passiert wenn man nur die 99 im Blick hat und sich nicht um die Datentypen kümmert.

Castet Python in dem neuen Case den INT Wert automatisch?
post_arrow
487 0
Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2115342

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.