Seite 1 von 1

like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:13
von smodo
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

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:24
von snafu
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. ;)

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:27
von martin101986
Mit Hilfe von time.sleep kannst du zwischen der Eingabe und den Würfeln eine Zeitverzögerung erreichen.

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:34
von smodo
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

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:45
von 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()

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 11:56
von smodo
@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

Re: like a würfel :)

Verfasst: Sonntag 13. Februar 2011, 13:22
von Hyperion
Hier noch ein netter Link zu einem Thread übers Würfeln.