Seite 1 von 1

Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 14:57
von duodiscus
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!

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 14:59
von /me
Bitte korrigiere die Einrückungen, die sind entscheidend in Python. Und was heißt "funktioniert nicht"? Bekommst du eine Fehlermeldung oder was passiert?

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 15:01
von EyDu
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?

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 15:30
von duodiscus
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.

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 15:45
von /me
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.

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 15:50
von duodiscus
Wenn ich die Funktion in der Shell aufrufe, gibt sie mir einen Wert.
Nur nicht 20 aus dem Bereich 1-10.

Bild

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 17:38
von 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.

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 18:36
von duodiscus
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)
        

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 18:57
von EyDu
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.

Re: Zahlengenerator

Verfasst: Mittwoch 9. April 2014, 19:32
von Hyperion
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 :-)