like a würfel :)

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
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

Grüezi Wohl und guten morgähn.

Ich hab da mal ein "programm" geschrieben um zu Würfeln.

Code: Alles auswählen

# -*- coding: utf-8 -*-

import random

inhalt = [1, 2, 3, 4, 5, 6]

def wurf():
    resultat = random.choice(inhalt)
    return resultat

print "[G] oder [g], um zu würfeln\n[ende] um zu beenden.\n"

while True:
    ansage = raw_input("")
    if ansage == ("g" or "G"):
        print "Wurf = ", wurf()
    elif ansage == "ende":
        break
    else:
        print "\nBitte [g] oder [G] eingeben..\n"

if __name__=="__main__":
    __name__
So, und nun meine 2 Fragen. Warum geht das jetzt nicht wen ich ein G tippe? Es würfelt bei g, aber nicht bei G. ? Habe auch ["g" or "G"] probiert aber das geht auch nicht. Zuerst habe ich es noch in einer elif ansage == "G": gemacht damit alles funktionierte. Aber es sollte doch eig. auch in einer Zeile machbar sein.
Ausserdem möchte ich eig. gerne das wen ich g oder G eingebe, das programm 3 sek. wartet bis es mir den wurf ausgibt, ein würfel fällt ja auch nicht per sofort runter und zeigt gleich eine Zahl an in 0.1 sek. aber ich komm irgendwie einfach nicht drauf wie man das macht.

Liebe Grüsse
Der Andi
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Was du willst ist:

Code: Alles auswählen

if ansage in ('g', 'G'):
Oder kürzer:

Code: Alles auswählen

if ansage in 'gG':
Oder meintwegen auch:

Code: Alles auswählen

if ansage.lower() == 'g':
Gib doch mal `'g' or 'G'` in der Shell des Interpreters ein. Du wirst sehen, dass "g" herauskommt, weil eben der erste wahre Ausdruck zählt. Das ist in dem Fall jeder nichtleere String. Du sagst deinem Programm also im Endeffekt damit `if eingabe == 'g'`, was entsprechend nicht zu dem führt, was du dir gedacht hast. ;)
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Mit Hilfe von time.sleep kannst du zwischen der Eingabe und den Würfeln eine Zeitverzögerung erreichen.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

och ne snafu... ich könnte mich echt glatt selber schlagen... so logisch und ich dachte nicht eine sekunde daran.... man das ist wieder mal ein typischer "ACH JA, STIMMT JA" effekt.. :) und danke martin für die lösung, echt super :)

Danke euch und liebe grüsse
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
BlackJack

@smodo: Die Liste `inhalt` ist überflüssig wenn man aus `random` eine Funktion wählt, die eine zufällige Zahl zwischen 1 und 6 erzeugt.

Das `resultat` in `wurf` ist IMHO ein unnötiger zwischenschritt. Man könnte da auch gleich das Ergebnis des Funktionsaufrufes zurück geben.

Die leere Zeichenkette bei `raw_input()` kann man auch weg lassen.

Das ``if __name__``-Konstrukt am Ende ist so wie es da steht sinnlos, weil es nichts tut. Eigentlich sollte das die Hauptfunktion aufrufen die es bei dem Programm nicht gibt. Da sollte der Code auf Modulebene nach der `wurf()`-Funktion drin stecken.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import sys
import time
from functools import partial


wurf = partial(random.randint, 1, 6)


def main():
    print (
        '[G] oder [g], um zu würfeln\n'
        '[ende] um zu beenden.\n'
    )
    while True:
        ansage = raw_input().lower()
        if ansage == 'g':
            sys.stdout.write('Wurf = ')
            sys.stdout.flush()
            time.sleep(1)
            print wurf()
        elif ansage == 'ende':
            return
        else:
            print '\nBitte [g] oder [G] eingeben..\n'


if __name__ == '__main__':
    main()
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

@BlackJack

Vielen dank, jetzt schnall ich das endlich ganz und richtig... zu edel echt. danke danke :)

und einen schönen sonntag, wünsch ich allen lesern.

grüsse
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hier noch ein netter Link zu einem Thread übers Würfeln.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten