Histogram

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Davidcopperfield
User
Beiträge: 8
Registriert: Freitag 12. November 2021, 22:15

Schreibe eine Histogramm-Funktion, welche eine Liste von Zahlen annimmt und dann ein Histogramm aus den #-Zeichen zurückgibt.
Wenn der Benutzer einen Wert eingibt, welcher keine Zahl ist, sollte die Funktion den Wert None zurückgeben.
Das resultierende Histogramm soll eine mehrzeilige Anweisung sein, welche aus #-Zeichen besteht. Eine Zeile = ein Histogrammbalken.
Löse die Aufgabe, ohne die Multiplikation von Zahlenreihen zu verwenden! Verwende stattdessen zwei Schleifen.

Hier sind meine, nicht funktionierende Vorschlaege:

Code: Alles auswählen

lista1 = lista2
lista2 = [x, y, z, q, w, p, l, t, b, e]
int(input(lista1))
print(lista2)
def histogram(lista2):
    result = ''
    for qq in lista2:
        return lista2[::1] + "\n"
        while int not in lista2:
                return("None") + "\n"
    return result
qwx = histogram(lista2)
print(qwx)

print("+++++++++++++++\n")


x = float(input("Geben Sie den ersten Tabellenwert ein: "))
y = float(input('Gib den zweiten  Tabellenwert ein: '))
z = float(input('Gib den dritten  Tabellenwert ein: '))listaxx = [x, y, z]
def histogram(listaxx):
    result = ''
    for qq in listaxx:

        return (x * str("#")) + "\n"
        return (y * str("#")) + "\n"
        return (z * str("#")) + "\n"


        while float not in listaxx:
                return("None") + "\n"
    return result
qwx = histogram(listaxx)
print(qwx)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Davidcopperfield: Das kommt nicht mal am Compiler vorbei ist also nicht mal ansatzweise gelaufen. Einfach sinnlos irgendwelchen Code raten und den nicht mal ausprobieren, und dann hoffen wir lösen Deine Hausaufgabe, wird so nicht funktionieren.

Verwende sinnvolle Namen und nicht irgendwelche Einzelbuchstaben oder kryptischen Kürzeln wie `qq` oder `qwx` oder Namen die aus Grunddatentypen und angehängten Buchstaben und Zahlen bestehen.

In der Python-Dokumentation gibt es Grundlagentutorial, dass Du mal durcharbeiten solltest, denn der Code offenbart, dass Du die Grundlagen von Funktionen und ``return`` noch nicht kennst.

Der Wert `None` ist etwas anderes als eine Zeichenkette mit dem Wort "None".

Der letzte Satz „Löse die Aufgabe, ohne …“ dürfte falsch zitiert sein, denn da steht sehr wahrscheinlich nicht „Zahlenreihen“ sondern etwas anderes.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Davidcopperfield
User
Beiträge: 8
Registriert: Freitag 12. November 2021, 22:15

Code: Alles auswählen

x = int(input("Gib die Anzahl der Zeilen an: "))
liste = []
for qq in range(x):

    y = int(input("Gib die Nummer an: "))
    liste.append(y)
def histogram(liste):
    result = ""
    for n in liste:
        if type(n) == int:
            result += "#" * n + "\n"
        else:
            result = None
            break
    return result

print(histogram(liste))
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe da nur eine Schleife, und eine Multiplikation.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Ich meine das nicht böse, aber irgendwie erinnern mich die Beiträge von Davidcopperfield an das hier: https://www.hornoxe.com/wp-content/picd ... 76_013.jpg 🙈
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Komisch 0.5 will das Programm irgendwie nicht annemhen, und wenn ich 10_000_000 als einen der Werte eingebe, dann verhält sich das Programm auch irgendwie merkwürdig.

Davon abgesehen ist wiederholtes addieren von Zeichenketten die immer grösser werden ineffizient. Der idiomatische Weg wäre es die Teilzeichenketten in einer Liste zu sammeln oder zumindest etwas iterierbares zu erstellen, und damit dann die `join()`-Methode von Zeichenketten zu verwenden um das Ergebnis zusammenzusetzen.

Auf Typen testet man nicht mit `type()` sondern mit `isinstance()` — sofern man das überhaupt macht/machen will. Idiomatischer wäre es einfach zu machen was man machen will und auf die entsprechende(n) Ausnahme(n) reagieren, falls man das mit dem falschen Datentyp versucht. Denn neben `int` und `float` gibt es alleine in der Standardbibliothek noch `decimal.Decimal` und `fractions.Fraction` die Zahlen sind. Und ausserhalb der Standardbibliothek noch einen ganzen Zoo an anderen Zahl-Datentypen aus deren Werten man ein Histogramm erstellen könnte, wenn man das nicht künstlich einschränkt.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten