Rangliste mit file?

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.
AphrodiTe
User
Beiträge: 22
Registriert: Dienstag 18. September 2007, 12:48
Wohnort: Göttingen
Kontaktdaten:

Rangliste mit file?

Beitragvon AphrodiTe » Montag 8. Oktober 2007, 15:08

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
Die Aussage eines Satzes ist reziprok zur Anzahl der kumulierenden Satzzeichen.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Montag 8. Oktober 2007, 15:33

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

Code: Alles auswählen

liste=hallo[0:4]
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.

Code: Alles auswählen

    versuche=versuche+1

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
AphrodiTe
User
Beiträge: 22
Registriert: Dienstag 18. September 2007, 12:48
Wohnort: Göttingen
Kontaktdaten:

hi

Beitragvon AphrodiTe » Montag 8. Oktober 2007, 16:01

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
Die Aussage eines Satzes ist reziprok zur Anzahl der kumulierenden Satzzeichen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 8. Oktober 2007, 16:27

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
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

Beitragvon BlackJack » Montag 8. Oktober 2007, 16:55

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:

Code: Alles auswählen

lieseingabe = raw_input


``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)
AphrodiTe
User
Beiträge: 22
Registriert: Dienstag 18. September 2007, 12:48
Wohnort: Göttingen
Kontaktdaten:

thx

Beitragvon AphrodiTe » Dienstag 9. Oktober 2007, 12:48

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??
Die Aussage eines Satzes ist reziprok zur Anzahl der kumulierenden Satzzeichen.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Dienstag 9. Oktober 2007, 23:10

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:
...

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]