Mein Vorschlag ist:

def numbers(count): #Iterator-Funktion die dich nach n Zahlen fragt
    index = 0 #Helfer, um zu ermitteln, nach welcher Zahl gefragt wird.

    while index < count: #Bricht ab, wenn "count" Zahlen abgefragt wurden
        output = input(f"Zahl { index + 1 }:") #Frage nach der Zahl

        if int(output) in range(1, 7): #Vorliebe
            yield output #Das macht die Funktion zum Iterator
            index += 1 #Helfer auf die nächste Zahl setzen
        else:
            #Fehlerbedingung, Helfer wird nicht hochgesetzt.
            #Damit wird die selbe Zahl nochmal abgefragt
            print("Die Zahl muss zwischen 1 und 6 liegen!")

#Programmstart
print("Tippe drei Zahlen zwischen 1 und 6")

#Ausgabe der Zahlen - ist natürlich beliebig.
print(list(numbers(3)))

Deine Frage enthält eine Menge kleiner Fehler:

output = print ("Tippe drei Zahlen zwischen 1 und 6")

Das "output = " ist überflüssig

output1 = input ("Zahl 1:")

Das sollte innerhalb der Schleife liegen, damit output1 in jedem Durchgang neu abgefragt wird.

while True:
    if (int (output1) <= 6 and int (output1) >= 1):

Völlig in Ordnung

        zahl1 = output1

Ist genau genommen überflüssig weil du am Ende eh alles in output1, ..2, ..3 stehen hast.

        break;
    else:

Völlig in Ordnung

        input ("Die Zahl muss zwischen 1 und 6 liegen!")

An dieser Stelle liegt ein Fehler vor. Entweder du sagst "print" und ziehst das "output1 = input(..." in die Schleife oder du lässt das oben vor der Schleife und sagst hier "output1 = input ("Die Zahl muss zwischen 1 und 6 liegen!")"

Denn bei dem zweiten Schleifendurchlauf wird output1 nicht neu gesetzt und verbleibt sonst auf dem falschen Wert und du hast eine endlos-Schleife die immer wieder die letzte Frage stellt.

output2 = input ("Zahl 2:")
while True:
    if (int (output2) <= 6 and int (output2) >= 1):
        zahl2 = output2
        break;
    else:
        input ("Die Zahl muss zwischen 1 und 6 liegen!")
...

Der Teil ist unschön, da im Prinzip 3x das Gleiche gemacht wird. Du kannst die Funktion in eine naja Funktion packen und dann einfach 3x aufrufen und die Ausgaben mit nem String - Format, oder einer String - concat dynamisch gestalten oder wie in meinem Beispiel die Schleife für die Fehleingaben UND die Iteration benutzen.

Dein Programm "minimal repariert" sieht so aus:

print ("Tippe drei Zahlen zwischen 1 und 6")

output1 = input ("Zahl 1:")
while True:
    if (int (output1) <= 6 and int (output1) >= 1):
        zahl1 = output1
        break;
    else:
        output1 = input ("Die Zahl muss zwischen 1 und 6 liegen!")

output2 = input ("Zahl 2:")
while True:
    if (int (output2) <= 6 and int (output2) >= 1):
        zahl2 = output2
        break;
    else:
        output2 = input ("Die Zahl muss zwischen 1 und 6 liegen!")

output3 = input ("Zahl 3:")
while True:
    if (int (output3) <= 6 and int (output3) >= 1):
        zahl3 = output3
        break;
    else:
        output3 = input ("Die Zahl muss zwischen 1 und 6 liegen!")

Dein Programm minimal schöner und repariert sieht so aus:

print ("Tippe drei Zahlen zwischen 1 und 6")

def get_zahl(which):
    output = input (f"Zahl {which}:")
    while True:
        if (int (output) <= 6 and int (output) >= 1):
            return output
        else:
            output = input ("Die Zahl muss zwischen 1 und 6 liegen!")

output1 = get_zahl("1")
output2 = get_zahl("2")
output3 = get_zahl("3")

...zur Antwort
sum(int(x) for x in str(n))

Erklärung:

Ein string ist in python iterierbar.

list("abc") erzeugt also ["a", "b", "c"]

Mit str wandelt man in python eine Zahl in ihre String-Repräsentation zur Basis 10. Also genau das, was wir für die Quersumme brauchen.

Also list(str(123)) erzeugt ["1", "2", "3"]

Da dies eine Liste von Strings erzeugt, muss jede einzelne String-Zahl wieder mit int in eine Zahl umgewandelt werden. Dazu benutzt man am Besten eine list-Comprehension:

Also [int(x) for x in str(123)] erzeugt [1, 2, 3]

Um die Quersumme zu errechnen muss man lediglich die Dezimalstellen einer Zahl miteinander addieren. Da wir die Dezimalstellen so schön durch unsere List-Comprehension extrahieren konnten können wir nun einfach die Liste summieren. Die [] benötigen wir dann nichtmal beim Aufruf von sum.

Also sum(int(x) for x in str(123)) ergibt 6

oder allgemeiner:

sum(int(x) for x in str(n)) ergibt die Quersumme von n
...zur Antwort

sum(int(x) for x in str(n))

Erklärung:

Ein string ist in python iterierbar.

list("abc") erzeugt also ["a", "b", "c"]

Mit str wandelt man in python eine Zahl in ihre String-Repräsentation zur Basis 10. Also genau das, was wir für die Quersumme brauchen.

Also list(str(123)) erzeugt ["1", "2", "3"]

Da dies eine Liste von Strings erzeugt, muss jede einzelne String-Zahl wieder mit int in eine Zahl umgewandelt werden. Dazu benutzt man am Besten eine list-Comprehension:

Also [int(x) for x in str(123)] erzeugt [1, 2, 3]

Um die Quersumme zu errechnen muss man lediglich die Dezimalstellen einer Zahl miteinander addieren. Da wir die Dezimalstellen so schön durch unsere List-Comprehension extrahieren konnten können wir nun einfach die Liste summieren. Die [] benötigen wir dann nichtmal beim Aufruf von sum.

Also sum(int(x) for x in str(123)) ergibt 6 oder allgemeiner:

sum(int(x) for x in str(n)) ergibt die Quersumme von n

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.