ein kleines quiz

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, dafür gibt es dann textwrap.dedent, damit kann man die führende Einrückung wegschneiden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Leonidas

Danke für deinen Tipp 'textwrap.detent'. War mir bis jetzt nicht bekannt.

Hier das Code-Stück: Ausgabe eines 'Multi-Line-Strings' aus einer Funktion formatiert mit der Methode 'dedent' aus dem Modul 'textwrap'

Code: Alles auswählen

# Verfasser: wuf
# Skriptname py_quiz_02_02_01.py (14.09.2008-01)

# Funktion: Ausgabe eines Multi-Line-Strings aus einer Funktion
#           oder Methode (mit Einrueckung)

import textwrap

def print_multi_line():
    """Ausgabe eines Multi-Line_Strings"""

    print textwrap.dedent("""
    --------------------------------
    ######Coded by Rootmentor#######
    --------------------------------

    Willkommen beim Quiz von Rootmentor

    Erste frage: Mit was wurde dieses quiz Programmiert?
    1. Php
    2. Python
    3. Html""")
    antwort = raw_input("Welche Sprache ist es? ")

print_multi_line()
Besten Dank! Schon wieder etwas neues erfahren.

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Rootmentor

Hier noch einmal dein von mir modifiziertes Code-Snippet mit Einbezug der neuen Erkenntnisse:

Code: Alles auswählen

#!/usr/bin/env python

# Abgeleitet von:
# Verfasser: Rootmentor Do Sep 11, 2008 20:56
# http://www.python-forum.de/topic-16021.html

# Modifiziert durch wuf:
# Skriptname py_quiz_02.py (14.09.2008-01)

from textwrap import dedent

punktzahl = 0
PUNKTINFO = "Richtig! Dein Punktestand ist:"

def header():
    """Kopfzeile Rootmentor's Quiz"""

    print dedent("""
    --------------------------------
    ######Coded by Rootmentor#######
    --------------------------------

    Willkommen beim Quiz von Rootmentor""")


header()

print """
Erste frage: Mit was wurde dieses quiz Programmiert?
1. Php
2. Python
3. Html"""

antwort = raw_input("Welche Sprache ist es? ")

if antwort == "2":
    punktzahl = 1
    print PUNKTINFO, punktzahl
else:
    print "Das ist leider Falsch!\nDie Antwort ist : Python"
print

print """Nun kommt die zweite Frage: Welcher Computer ist der beste?
1. windoof
2. Macmini
3. portablepc"""
antwort = raw_input("Welche Computer ist es? ")

if antwort == "2":
    punktzahl = 2
    print PUNKTINFO, punktzahl
else:
    print "Das ist leider Falsch, Dein Punktestand: " + str(punktzahl) +\
        "\nDie richtige Antwort ist : Macmini"

print

print """Bereit fuer die letzte alles entscheidene Frage? Gut! Hier kommt sie!
Wie lange habe ich fuer dieses Quiz gebraucht?
1. Ein Tag
2. Eine Woche
3. Zwei Stunden
4. Vier bis sechs Tage"""
antwort = raw_input("Wie lange? ")

if antwort == "3":
    punktzahl = 3
    print PUNKTINFO, punktzahl
    print
else:
    print "Das ist leider Falsch, Dein Punktestand ist:" + str(punktzahl) +\
        "\nDie richtige Antwort ist : Zwei Stunden"
    print

print "So das wars mit dem Quiz. Dein Punktestand betraegt", punktzahl

print
print "BIS ZUM NAECHSTEN MAL !!!"
print

exit()
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Wie waers einfach mit

Code: Alles auswählen

print ("Foo"
       "Bar"
       "Baz"
       "Spam"
       "Eggs")
Das geht dann ueberall, auch wenns eingerueckt ist, ohne Probleme.

BTW, Tut mir zwar leid, aber das ganze ist ziemlich broken. Probiers mal in Funktionen aufzuteilen, et cetera. z.B. eine List mit fragen und antworten, dann drueber iterieren, und fragen, wenn richtig punktestand erhoehen.

Bitte Leute, wenn ihr im helft, helft ihm wirklich und verbessert nicht nur seinen Code, der aber viele design-flaws hat.

So in der Art, ist aber nur schnell hingefetzt, wobei ich das mit dem prompt ja weglassen wuerd, aber wie du willst.

Code: Alles auswählen

# (Frage, (Antwort, Andere Antwort), Prompt, Index der richtigen Antwort)
questions = [("Ist dieses Programm sinnlos?", ("Ja", "Nein"), "Sinnlos? ", 0),
             ("Ist name langweilig?", ("Nein", "Ja"), "Langeweile? ", 1)]


def display_question(question, answers):
    print question
    for i, answer in enumerate(answers):
        print "%d: %s" % (i+1, answer)


def ask_question(question, answers, prompt, right_answer):
    display_question(question, answers)
    while True:
        try:
            ans = int(raw_input(prompt))
            if 0 < ans <= len(answers):
                break
        except ValueError:
            pass
    return ans-1 == right_answer


def main():
    score = 0
    for qst in questions:
        question, answers, prompt, right_answer = qst
        if ask_question(question, answers, prompt, right_answer):
            score+=1
        else:
            print "Richtig waere \"%s\" gewesen" % answers[right_answer]
    print score
    

if __name__ == "__main__":
    main()
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo name
name hat geschrieben:Wie waers einfach mit

Code: Alles auswählen

print ("Foo"
       "Bar"
       "Baz"
       "Spam"
       "Eggs")
Das geht dann ueberall, auch wenns eingerueckt ist, ohne Probleme.
Hast du dies auch wirklich ausprobiert?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

wuf hat geschrieben:Hallo name
name hat geschrieben:Wie waers einfach mit

Code: Alles auswählen

print ("Foo"
       "Bar"
       "Baz"
       "Spam"
       "Eggs")
Das geht dann ueberall, auch wenns eingerueckt ist, ohne Probleme.
Hast du dies auch wirklich ausprobiert?

Gruss wuf :wink:
Das man da die newlines braucht sollte sich doch von selbst verstehen. Also das waere dann:

Code: Alles auswählen

print ("Foo\n"
       "Bar\n"
       "Baz\n"
       "Spam\n"
       "Eggs")
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Für längere Texte wie Docstrings oder eben längere Ausgaben halte ich das kaum für sinnvoll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Rootmentor

Habe den Vorschlag von 'name' für die Ausgabe eines 'Multi-Line-Strings angewendet.

Code: Alles auswählen

# Abgeleite von meinem Beitrag (So Sep 14, 2008 15:16)
# Habe den Vorschlages für die Ausgabe eines Multi-Line-Strings
# von 'name' angewendet.

# Verfasser: wuf
# Skriptname py_quiz_02_02_02.py (14.09.2008-01)

# Funktion: Ausgabe eines Multi-Line-Strings aus einer Funktion
#           oder Methode (mit Einrueckung)

def print_multi_line():
    """Ausgabe eines Multi-Line_Strings"""

    print ("\n--------------------------------\n"
    "######Coded by Rootmentor#######\n"
    "--------------------------------\n\n"
    "Willkommen beim Quiz von Rootmentor\n\n"
    "Erste frage: Mit was wurde dieses quiz Programmiert?\n"
    "1. Php\n"
    "2. Python\n"
    "3. Html")
    antwort = raw_input("Welche Sprache ist es? ")

print_multi_line()
name hat geschrieben: Das man da die newlines braucht sollte sich doch von selbst verstehen. Also das waere dann:
Wenn es jeder von selbst verstehen würde brauchte es dieses Forum nicht mehr. :lol:

Übrigens dein Ansatz-Code für das Quiz-Programm finde ich gut (fast flaw-less).

Gruss wuf :wink:
Take it easy Mates!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@name: Du könntest das zusätzliche Feld für die Angabe der korrekten Antwort noch sparen, wenn du diese immer im ersten Element den Antwort-Tupels ablegst. Vor der Ausgabe mischt man dann einfach alle möglichen Antworten und zeigt diese dann dem Benutzer.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

EyDu hat geschrieben:@name: Du könntest das zusätzliche Feld für die Angabe der korrekten Antwort noch sparen, wenn du diese immer im ersten Element den Antwort-Tupels ablegst. Vor der Ausgabe mischt man dann einfach alle möglichen Antworten und zeigt diese dann dem Benutzer.
Das ueberlass ich mal dem OP als Fleissaufgabe, sonst schreib ich ihm ja sein ganzes Programm.
wuf hat geschrieben:Übrigens dein Ansatz-Code für das Quiz-Programm finde ich gut (fast flaw-less).
Dankeschoen :)
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Man braucht kein textwrap.dedent um das Einrückungsproblem zu beheben.

Code: Alles auswählen

multistring = """
--------------------------------
######Coded by Rootmentor#######
--------------------------------

Willkommen beim Quiz von Rootmentor

Erste frage: Mit was wurde dieses quiz Programmiert?
1. Php
2. Python
3. Html"""

def print_multi_line():
    print multistring
    antwort = raw_input("Welche Sprache ist es? ")

print_multi_line()
BlackJack

Versuchs doch mal bei einer Zeichenkette die eingrückt ist. Oder eine nicht eingerückte Zeichenkette in einer Funktion ohne das die Lesbarkeit leidet.
Rootmentor
User
Beiträge: 54
Registriert: Sonntag 17. August 2008, 18:26
Wohnort: Lingen
Kontaktdaten:

Danke das mit den leerzeichen gefällt mir x)
Ich glaube das werde ich mir angewöhnen
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

bremer hat geschrieben:Man braucht kein textwrap.dedent um das Einrückungsproblem zu beheben.

Code: Alles auswählen

multistring = """
--------------------------------
######Coded by Rootmentor#######
--------------------------------

Willkommen beim Quiz von Rootmentor

Erste frage: Mit was wurde dieses quiz Programmiert?
1. Php
2. Python
3. Html"""

def print_multi_line():
    print multistring
    antwort = raw_input("Welche Sprache ist es? ")

print_multi_line()
Böse globale Variable!
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Neben dem ganzen multi-line-string getue eine Frage an den OP: a) Hat dir mein Beispiel geholfen und b) Wie sieht das Programm jetzt aus.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Klip hat geschrieben:Böse globale Variable!
Naja, so schlimm ist das hier nicht - es ist ja nur ein Lesezugriff.

Allerdings gibt es auch keinen guten Grund, multistring nicht im lokalen Namensraum der Funktion zu definieren.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

numerix hat geschrieben:
Klip hat geschrieben:Böse globale Variable!
Naja, so schlimm ist das hier nicht - es ist ja nur ein Lesezugriff.

Allerdings gibt es auch keinen guten Grund, multistring nicht im lokalen Namensraum der Funktion zu definieren.
Womit wir wieder am Anfang, dem Einrueckungsproblem, waeren. Ich persoenlich finde """ strings eingerueckt grauslich, weil die folgenen Zeilen sehen immer so aus als waeren sie auf Modul-Ebene.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

name hat geschrieben:Womit wir wieder am Anfang, dem Einrueckungsproblem, waeren. Ich persoenlich finde """ strings eingerueckt grauslich, weil die folgenen Zeilen sehen immer so aus als waeren sie auf Modul-Ebene.
Deshalb wurde ja bereits festgestellt, dass ``textwrap.dedent`` existiert. Oder verstehe ich gerade etwas falsch?
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Rootmentor
User
Beiträge: 54
Registriert: Sonntag 17. August 2008, 18:26
Wohnort: Lingen
Kontaktdaten:

ja dein beispiel war schon sehr hilfreich so sietzt jetzt aus

Code: Alles auswählen

#!/usr/bin/env python
import os
int = 0
punktinfo = "Dein punktestand:"
print "--------------------------------"
print "######Coded by Rootmentor#######"
print "--------------------------------"
print "Wilkommen beim Quiz von Rootmentor"

print "Erste frage: Mit was wurde dieses quiz Programmiert? \n 1. Php: \n 2. Pyhton: \n 3. Html: "
antwort = raw_input()


if antwort == "2":
    int += 1
    print "Richtig du dein punktestand"
    print int
else:
        print "Das ist leider Falsch"
        print "Die antwort ist : Python"

print " Nun kommt die zweite Frage: Welcher Computer ist der beste? \n 1.windoof \n" + "2. Mac mini \n" + "3.Portablepc"

antwort2 = raw_input()

if antwort2 == "2":
    int += 1
    print "Richtig dein Punktestand:"
    print int
else:
      print "Das ist leider Falsch, Dein Punktestand:"
      print int
      print "Die richtige antwort ist : Macmini"


print "Bereit fuer die Letzte alles entscheidene Frage?Gut!Hier kommt sie!"

print "Wie lange habe ich fuer dieses quiz gebraucht? /n 1. ein tag :\n 2. Eine woche :\n 3. Zwei Stunden :\n 4.vier bis sechs tage"

antwort3 = raw_input()

if antwort3 == "3":
    int += 1 
    print "Richtig dein Punktestand"
    print int
else:
    print "Das ist leider Falsch, Dein Punktestand:"
    print int
    print "Die richtige antwort ist : Zwei Stunden"


print "So das wars mit dem quiz. Dein punktestand betraegt"
print int
print "Bis dann!"

exit()
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Rootmentor hat geschrieben:ja dein beispiel war schon sehr hilfreich so sietzt jetzt aus
Und was genau von meinem Beispiel hast du jetzt bitte verwendet? :shock:
Beherz dir mal das ganze schoen in Funktionen aufzuteilen, wie eben in meinem Beispiel. Das sollte es ja zeigen.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Antworten