Seite 1 von 1
Rangliste mit file?
Verfasst: Montag 8. Oktober 2007, 15:08
von AphrodiTe
hi @ all,
ich habe ien Problem.Ich wollte sozusagen eine rangliste schreiben die den namen und die benötigten versuche Dokumentiert.
kann ich das mit file machne??? oder womit soll ich das machen.
Code: Alles auswählen
import random
def lieseingabe(prompt):
eingabe=raw_input(prompt)
return eingabe
def Zufallsziffern(n):
m=""
for i in range(4):
m=m+str(random.randint(0,9))
return(m)
def bestimmeap(z,ziffern):
r=0
for i in range(len(z)):
if z[i]==ziffern[i]:
r=r+1
return(r)
def bestimmeRichtige(z,hallo):
r=0
liste=[]
liste.append(hallo[0])
liste.append(hallo[1])
liste.append(hallo[2])
liste.append(hallo[3])
for i in range(len(z)):
if z[i] in liste:
r=r+1
liste[i]="x"
return(r)
print "Willkommen bei mastermind.py ! geben sie 4 zahlen ein!"
z=Zufallsziffern(4)
amplatz=0
versuche=0
while amplatz < 4:
versuche=versuche+1
eingabe=lieseingabe("Tipp?")
richtig=bestimmeRichtige(z,eingabe)
print "Sie haben",richtig,"Zahlen richtig"
amplatz=bestimmeap(z,eingabe)
print "und",amplatz,"am richtigen platz"
print "Hurra...sie haben mit nur",versuche, "Versuchen gewonnen"
ps: habe ein programm geschrieben:Mastermind. Ich möchte, dass das programm nachdem man gespielt hat, einen in die rangliste schreibt wenn man gut genug ist!
vielen dank
Verfasst: Montag 8. Oktober 2007, 15:33
von schlangenbeschwörer
Hi!
So ganz versteh ich deinen Code grad nicht, aber mal sehn...
Code: Alles auswählen
def lieseingabe(prompt):
eingabe=raw_input(prompt)
return eingabe
Das ist total überflüssig.
Code: Alles auswählen
def Zufallsziffern(n):
m=""
for i in range(4):
m=m+str(random.randint(0,9))
return(m)
Hier ist "n" überflüssig. (wolltest du range(n) schreiben?)
"m = m+ ..." lässt sich zu "m += ..." verkürzen.
Code: Alles auswählen
def bestimmeRichtige(z,hallo):
r=0
liste=[]
liste.append(hallo[0])
liste.append(hallo[1])
liste.append(hallo[2])
liste.append(hallo[3])
for i in range(len(z)):
if z[i] in liste:
r=r+1
liste[i]="x"
-was ist hallo für ein name?
-wenn len(hallo) immer gleich 4 ist, ist das überflüssig. Sonst ist auch mit
getan
-die for-Schleife kann man auch schöner gestallten. Zuerst aber sollte man über die liste iritieren und dann eine neue anfertigen, die man ändert. Wenn du sie aber eh nicht verwendest brauchst du auch nix dran ändern.
Schon vor der ersten Eingabe hat man einen Versuch.
Zur Rangliste:
Am einfachsten wäre eine Liste in die du Tupel der Form (Anzahl-Versuche, Name) einfügst, die kannst du direkt sortieren und ausgeben.
mfg, jj
hi
Verfasst: Montag 8. Oktober 2007, 16:01
von AphrodiTe
hi,
also das ist dafür da damit ich später ncoh eine fehlermeldung einbauen kann,damit der benutzer nciht 5 zahlen oder sogar buchstaben eingeben kann...
das geht im moment nämlich nciht.
außerdem ist es somit übersichtlicher
Code: Alles auswählen
def lieseingabe(prompt):
eingabe=raw_input(prompt)
return eingabe
das mit dem tuple kenne ich. aber wie kann ich es so programmieren das er den spielstand sozusagen speichert?
thX
Verfasst: Montag 8. Oktober 2007, 16:27
von Rebecca
Wenn du Daten auch ueber die Laufzeit deines Programmes hinaus speichern willst, musst du das in Dateien tun. Schau mal hier:
http://www.python-forum.de/topic-6157.html
Verfasst: Montag 8. Oktober 2007, 16:55
von BlackJack
Ein paar Leerzeilen zumindest zwischen den Funktionen und Leerzeichen vor und nach Operatoren, sowie nach Kommata wären nicht schlecht. Dann "klebt" das optisch nicht alles so zusammen.
Solange `lieseingabe()` nichts anderes macht als `raw_input()` kann man das auch so schreiben:
``return`` ist keine Funktion sondern eine Anweisung. So etwas wie ``return(obj)`` sieht deshalb sehr komisch aus. Das schreibt man normalerweise mit einem Leerzeichen und ohne Klammern: `` return obj``.
`zufallsziffern()` kann man mit `str.join()` und einem Generatorausdruck kompakter schreiben:
Code: Alles auswählen
def zufallsziffern(n):
return ''.join(str(randint.randint(0, 9)) for dummy in xrange(n))
`bestimmeap()` geht auch in einer Zeile:
Code: Alles auswählen
def am_richtigen_platz(vorgabe, eingegeben):
return sum(int(a == b) for a, b in zip(vorgabe, eingegeben))
`bestimmeRichtige()` hätte ich wahrscheinlich so geschrieben:
Code: Alles auswählen
def anzahl_richtiger_ziffern(vorgabe, eingegeben):
tmp = list(eingegeben)
for ziffer in vorgabe:
try:
tmp.remove(ziffer)
except ValueError:
pass
return len(vorgabe) - len(tmp)
thx
Verfasst: Dienstag 9. Oktober 2007, 12:48
von AphrodiTe
Vielen dank dafür =)
habe es mal verbessert bei mir. Glaube aber das bei dir auch ein fehler drinnen ist.
heißt es nciht random.randint und nicht randint.randint ??
mache mich jetzt mal an die rangliste
kai
das mit der textdatei habe ich verstanden =) ...ich öffne sie und schreibe etwas hinein.
wie kann ich jetzt dem programm klar machen das es gucken soll ob mal mit der anzahl der versuchen in die rangliste kommt??
Verfasst: Dienstag 9. Oktober 2007, 23:10
von Joghurt
Noch ein Tipp:
schlangenbeschwörer hat geschrieben:
Code: Alles auswählen
for i in range(len(z)):
if z[i] in liste:
r=r+1
liste[i]="x"
Das läßt sich schöner mit enumerate schreiben:
Code: Alles auswählen
for i,element in enumerate(z):
if element in liste:
...