Python :: Aufgabe #144

5 Lösungen Lösungen öffentlich

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)?

Lösungen:

vote_ok
von jigga (4260 Punkte) - 23.02.2017 um 13:43 Uhr
Quellcode ausblenden Python-Code
def f(n):
    
    zahl=''
    
    for i in range(n,0,-1):
        zahl += format(i,'b')
    return int(zahl,2)

while True:

    z = int(input("Zahl (int) eingeben: "))
    print("f(" + str(z) + ") = " + "{:,}".format(f(z)).replace(",","."))
    
    nochmal = input("Nochmal? (y/n)")
    print()
    if nochmal == 'y' or nochmal == 'Y':
        continue
    else:
        break
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)
vote_ok
von Nachbar (2820 Punkte) - 19.09.2017 um 19:02 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

# dezimal in binaer umwandeln
def dezbin(dezzahl):
    rest = ""
    ergebnis = dezzahl
    while ergebnis != 0:
        rest = str(ergebnis % 2) + rest
        ergebnis = ergebnis / 2
    return int(rest)

# binaer in dezimal umwandeln    
def bindez(binzahl):
    dezzahl = 0
    lbin = list(str(binzahl))
    lbin.reverse()
    for i, j in enumerate(lbin):
        if j == "1":
            dezzahl = dezzahl + 2**i
    return "{:,}".format(dezzahl)

#----------------------------------
 
n = input("Zahl n: " )

# Funktion 
n_zahlen = ""
for i in range(n, 0, -1):
    n_zahlen = n_zahlen + str(dezbin(i))
# Ergebnis
print "\nf(" + str(n) + "): " + str(bindez(n_zahlen))
vote_ok
von nitnat (670 Punkte) - 26.01.2018 um 23:52 Uhr
Quellcode ausblenden Python-Code
# Funktion über eine natürliche Zahl

def f(n):
    l=[]
    
    def a(n): 
        if n==0:
            return 
        else:
            b(n,len(l))
            a(n-1)
        return l

    def b(n,i):
        if n//2!=0:
            l.insert(i,n%2)            
            b(n//2,i)            
        else:
            l.insert(i,n%2)
        return l

    a(n)
    n=0
    c=0
    l=l[::-1]
    for i in l:
        c=c+(i*2**n)
        n+=1
    return c
vote_ok
von satn1241 (3090 Punkte) - 03.04.2020 um 14:07 Uhr
Quellcode ausblenden Python-Code
def binary(number):
    return int(''.join(bin(number).split('0b')))

zahl = 99
a = ""
liste = list(range(zahl,0,-1))
for i in range(0,len(liste)):
    liste[i] = binary(liste[i])
    a = a + str(liste[i])
print("Die Liste ist:", liste)
print("Die aneinandergereite Zahl ist:",a)
print("Die transformierte Zahl ist:",int(a,2))


2115621

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.