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.
Hey Leute.
Ich möchte eine Art "Lottospiel" in Python programmieren. Dort sollen zuerst 5 Zahlen abgefragt werden und dann per "random" 5 zahlen generiert werden. Dann sollen diese beide auf Übereinstimmung kontrolliert werden. Jetzt hab ich aber ein Problem das ich nicht verstehe: Das random module macht Probleme. Ich lade wie immer das modul (import random) und rufe es dann auf (z.B.: zahl1= random.randint(1,10)). Nun gibt mir die Konsole allerding folgendes aus: 'module' object has no attribute 'randint'. Dabei habe ich schon das random modul für dutzende programme genau so genuzt.
#!/usr/bin/python3
import random
import sys
zahl1 = int(input("Geben sie ihre erste Zahl ein: "))
if zahl1 >10:
print("Error, nur zahlen zwischen 1 und 10!")
sys.exit(1)
zahl2 = int(input("Geben sie ihre zweite Zahl ein: "))
if zahl2 >10:
print("Error, nur zahlen zwischen 1 und 10!")
sys.exit(1)
zahl3 = int(input("Geben sie ihre dritte Zahl ein: "))
if zahl3 >10:
print("Error, nur zahlen zwischen 1 und 10!")
sys.exit(1)
zahl4 = int(input("Geben sie ihre vierte Zahl ein: "))
if zahl4 >10:
print("Error, nur zahlen zwischen 1 und 10!")
sys.exit(1)
zahl5 = int(input("Geben sie ihre fünfte Zahl ein: "))
if zahl5 >10:
print("Error, nur zahlen zwischen 1 und 10!")
sys.exit(1)
zahl11 = random.randint(0,11)
@nfehren: Ich habe da so eine Vermutung wie Du Dein Modul genannt hast. Gib das Modulobjekt doch gleich nach dem Importieren mit `print()` aus und schau Dir an welches Modul das ist.
Wenn Du den gesamten Traceback gezeigt hättest, dann müssten wir da jetzt übrigens nicht raten, denn da steht ja auch Pfad und Name des ausgeführten Moduls drin.
BlackJack hat geschrieben:@nfehren: Ich habe da so eine Vermutung wie Du Dein Modul genannt hast. Gib das Modulobjekt doch gleich nach dem Importieren mit `print()` aus und schau Dir an welches Modul das ist.
Wenn Du den gesamten Traceback gezeigt hättest, dann müssten wir da jetzt übrigens nicht raten, denn da steht ja auch Pfad und Name des ausgeführten Moduls drin.
#!/usr/bin/python3
import random
zahl1_1 = random.randint(1,9)
zahl2_1 = random.randint(1,9)
zahl3_1 = random.randint(1,9)
zahl4_1 = random.randint(1,9)
zahl5_1 = random.randint(1,9)
zahl1 = int(input("Geben sie ihre erste Zahl ein: "))
zahl2 = int(input("Geben sie ihre zweite Zahl ein: "))
zahl3 = int(input("Geben sie ihre dritte Zahl ein: "))
zahl4 = int(input("Geben sie ihre vierte Zahl ein: "))
zahl5 = int(input("Geben sie ihre fünfte Zahl ein: "))
i = 0
if zahl1 == zahl1_1:
i = i+1
if zahl2 == zahl2_1:
i = i+1
if zahl3 == zahl3_1:
i = i+1
if zahl4 == zahl4_1:
i = i+1
if zahl5 == zahl5_1:
i = i+1
print("\n\nSie haben {0} Zahlen richtig getippt! Ihr zahlen lauteten: {1}|{2}|{3}|{4}|{5}. Die richtige Zahlenfolge war: {6}|{7}|{8}|{9}|{10}.".format(i, zahl1, zahl2, zahl3, zahl4, zahl5, zahl1_1, zahl2_1, zahl3_1, zahl4_1, zahl5_1))
Ich finde aber nirgends erklärt wie man jedem durchlauf einer schleife eine variable zuweist.
Edit: Dann könnte ich die generierung und die abfrage der Zahlen in 2 schleifen packen
Danach hast Du gelernt, wie man es *nicht* machen sollte, quasi auf die "harte Tour" oder wie didaktisch im recht guten Tutorial "Learn Python the hard way" oftmals vorgegangen wird.
Als nächstes schaust Du Dir mal die grundlegenden Datenstrukturen an; beginne mit den Listen
Dann wirst Du (hoffentlich) wissen, wie man dein Programm wesentlich besser gestalten kann.
import random
def guess(counts):
numbers = [random.randint(1, 9) for _ in range(counts)]
results = [
int(input("Number: ")) == number for number in numbers
]
print('Sie haben {} mal richtig getippt!\n'
'Die richtigen Zahlen waren: {}'.format(sum(results), numbers))
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
import random
def guess(counts):
numbers = [random.randint(1, 9) for _ in range(counts)]
results = [
int(input("Number: ")) == number for number in numbers
]
print('Sie haben {} mal richtig getippt!\n'
'Die richtigen Zahlen waren: {}'.format(sum(results), numbers))
import random
zahlen = [random.randint(1,9) for i in range (1,6)]
versuch = [int(input("Zahl: ")) == zahlen for zahlen in zahlen]
print("Sie haben {0} mal richtig getippt!\nDie richtigen Zahlen waren: {1}".format(sum(versuch), zahlen))
import random
zahlen = [random.randint(1,9) for i in range (1,6)]
versuch = [int(input("Zahl: ")) == zahlen for zahlen in zahlen]
print("Sie haben {0} mal richtig getippt!\nDie richtigen Zahlen waren: {1}".format(sum(versuch), zahlen))
Wo genau liegt darin eine Verbesserung? Abgesehen davon, dass Du nun PEP8 verletzt, hast Du auch noch eine Magic-Number eingebaut (die "6")... Zudem hast Du alles auf Modul-Ebene geholt, indem Du die Funktion abgeschafft hast.
Summa Summarum: Kein gelungenes Refactoring...
Und das wichtigste von allem: Du verstehst ja sicherlich nicht, *was* da abläuft und *wieso* man das so schreiben kann, oder?
import random
zahlen = [random.randint(1,9) for i in range (1,6)]
versuch = [int(input("Zahl: ")) == zahlen for zahlen in zahlen]
print("Sie haben {0} mal richtig getippt!\nDie richtigen Zahlen waren: {1}".format(sum(versuch), zahlen))
Wo genau liegt darin eine Verbesserung? Abgesehen davon, dass Du nun PEP8 verletzt, hast Du auch noch eine Magic-Number eingebaut (die "6")... Zudem hast Du alles auf Modul-Ebene geholt, indem Du die Funktion abgeschafft hast.
Summa Summarum: Kein gelungenes Refactoring...
Und das wichtigste von allem: Du verstehst ja sicherlich nicht, *was* da abläuft und *wieso* man das so schreiben kann, oder?
Das mit den funktionen versteh ich noch nicht, nein.
aber sonst versteh ich den Code größtenteils.
nfehren hat geschrieben:
Das mit den funktionen versteh ich noch nicht, nein.
aber sonst versteh ich den Code größtenteils.
Ganz ehrlich: Glaub ich Dir nicht!
Ich probiere gerade nach dem ähnlichen prinzip ein mastermind spiel zu erstellen, klappt auch ganz gut soweit ich muss nur noch die listen miteinander vergleichen.
>>> zahlen = [1, 2, 3, 4, 5]
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> [x for x in zahlen]
[1, 2, 3, 4, 5]
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
In [3]: zahlen = [1, 2, 3, 4, 5]
In [4]: [zahlen for zahlen in zahlen]
Out[4]: [1, 2, 3, 4, 5]
In [5]: [zahlen for zahlen in zahlen]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-20478e008e28> in <module>()
----> 1 [zahlen for zahlen in zahlen]
TypeError: 'int' object is not iterable
Ich bin gerade dabei ein mastermind spiel zu programmieren, ich hoffe ihr kennt das alle noch
Blos steh ich grad auf dem Schlauch wie ich die Listen miteinander vergleichen kann..
könnt ihr mir sagen welche syntax ich mir anschauen sollte?
import random
lösung = [random.sample(["rot", "blau", "gelb", "grün", "grau", "pink"],4)]
eingabe = []
for i in range(4):
eingabe.append(input("Farbe: "))
@nfehren: Der Struktur von `lösung` macht nicht viel Sinn. Da ist eine Liste zu viel.
Was die ”Syntax” betrifft, dazu braucht man unter anderem Schleifen und vielleicht auch „list comprehension”. An Funktionen wird `zip()` und `len()` nützlich sein und an Datentypen der Mengentyp `set`.