Zahlengenerator

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
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Hallo zusammen,
ich möchte gerne 20 zufällige Zahlen ausgeben lassen, die aus dem Bereich z.B. 1-10 stammen.
Ein paar Spielereien zu Funktionen und Zufallszahlen erstellen habe ich schon probiert.

Ich bin bisher soweit gekommen:

Code: Alles auswählen

import random
def funktion(): #Zufallszahlen erstellen#
for x in range(1,20):    
x = random.randint(1, 10)
return (x)
Leider funktioniert das nicht, wenn ich es ausführen will. Kann mir jemand sagen wo mein Fehler liegt und wie ich ihn beheben kann?
Danke für Hilfe!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Bitte korrigiere die Einrückungen, die sind entscheidend in Python. Und was heißt "funktioniert nicht"? Bekommst du eine Fehlermeldung oder was passiert?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du benutzt schon wieder keine Einrückung, du rufst die Funktion nicht auf, deine Schleife macht nur 19 Schritte und keine 20, du hast nirgends einen print-Aufruf.
duodiscus hat geschrieben:Leider funktioniert das nicht, wenn ich es ausführen will.
"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung. Was soll passieren? Was passiert? Gibt es eine Fehlermeldung und wenn ja, wie sieht der vollständige Traceback aus?
Das Leben ist wie ein Tennisball.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Okay, ich beschreibe es demnächst sofort ausführlicher! :oops:

Ich habe es jetzt ordentlich eingerückt und nun wird der Ablauf auch vernünftig gestartet:

Code: Alles auswählen


import random

def funktion():
    for x in range(1,20):
        x=random.randint(1,10)
        return (x)

Es wird daher auch kein Fehler mehr ausgegeben, sondern das Programm macht noch nicht genau das was ich will.
Es gibt nur eine Zufallszahl aus dem Bereich 1-10 aus, sobald ich die Funktion gestartet habe.
Mein Ziel ist es aber 20 Zufallszahlen auszugeben, die sich im Bereich von 1-10 befinden!
Das ist mein jetziges Problem.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Aktuell wird bei dem Code gar nichts gestartet, da die Funktion nicht aufgerufen wird.

Dein Problem ist, dass durch das return die Funktion verlassen wird.

Ein Folgeproblem wäre dann das range(1, 20). Welche Werte liefert das zurück? Teste das mal in einer Konsole oder lies in der Dokumentation nach.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Wenn ich die Funktion in der Shell aufrufe, gibt sie mir einen Wert.
Nur nicht 20 aus dem Bereich 1-10.

Bild
BlackJack

@duodiscus: Es wäre wahrscheinlich einfacher gewesen den Text aus der Python-Shell als Text per kopieren und einfügen in den Beitrag zu kopieren als einen Screenshot davon zu machen, den irgendwo hoch zu laden und dann hier als Bild in den Beitrag einzubinden.

Du gibst in der Funktion nichts aus. Und Du brichst, wie schon gesagt wurde, die Schleife beim ersten Durchlauf mit ``return`` ab.
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Nutze statt return(x) -> print(x). Das wars. Mehr war nicht falsch.

Code: Alles auswählen


>> funktion()
7
7
5
6
10
8
7
1
7
10
8
10
9
5
2
5
7
3
8
1
>>> 

Code: Alles auswählen


import random

def funktion():
    for x in range(1,21):
        x=random.randint(1,10)
        print(x)
        
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Statt ``range(1, 21)`` solltest du besser ``range(20)`` verwenden, dann ist es sofort offensichtlich, dass du 20 Schritte machen willst. Auch ist das x für die Zählvariable unüblich. Da es sich um einen Integer handelt, wird häufig i als Name verwendet: ``for i in range(20)``. Da der Wert nie verwendet wird, gibt es aber noch eine bessere Konvention: ein einfacher Unterstrich als Name deutet genau das an: ``for _ in range(20)``.

Auch ist es unschön einen Namen doppelt zu verwenden, wenn der für zwei verschiedene Dinge steht. In deinem Code verwendest du x als Zähler und als Wert für die Zufallszahl. Hier solltest du zwei verschiedene Namen verwenden. Am besten mehr als nur einen Buchstaben. x impliziert einen float oder einen Vektor aus floats, in deinem Fall handelt es sich aber um eine ganze Zahl. Üblich wäre m oder n, so wie es in der Mahtematik auch verwendet wird. Oder "zufallszahl", dann kennst du die Bedeutung auch noch in drei Wochen und musst nicht den Code im Detail lesen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

duodiscus hat geschrieben:Nutze statt return(x) -> print(x). Das wars. Mehr war nicht falsch.
Dazu noch ein Anmerkung: Schreib doch besser ``return x`` statt ``return (x)``. Damit wird sofort ersichtlich, dass es sich bei ``return`` um ein Anweisung und *nicht* um eine Funktion handelt! Sofern Du Python 2.x verwendest (und kein from __future__-Import drin hast), solltest Du ``print`` ebenfalls *ohne* Klammern schreiben. Denn erst ab Python 3 ist das Standard mäßig eine Funktion. Verwendest Du hingegen Python 3.x musst Du bei ``print`` natürlich Klammern setzen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten