2016-07-26 12 views
-3

Ich möchte den Code, den ich derzeit durch eine Liste von Fragen unendlich durchlaufen muss oder bis jemand eine falsche Antwort bekommt. Ich verwende derzeitKontinuierliche Zufallsfragen?

random.shuffle(questions) 

for question in questions: 
    question.ask() 

um jede Frage in einer Liste einmal zu stellen.

Wie kann ich es kontinuierlich fragen, bis der Benutzer eine falsche Antwort eingibt? Hier ist mein aktueller Code:

class Question(object): 
    def __init__(self, question, answer): 
     self.question = question 
     self.answer = answer 

    def ask(self): 

     response = input(self.question) 
     if response == self.answer: 
      print "CORRECT" 
     else: 
      print "wrong" 

questions = [ 
    Question("0", 0), 
    Question("π/6", 30), 
    Question("π/3", 60), 
    Question("π/4", 45), 
    Question("π/2", 90), 
    Question("2π/3", 120), 
    Question("3π/4", 135), 
    Question("5π/6", 150), 
    Question("π", 180), 
    Question("7π/6", 210), 
    Question("4π/3", 240), 
    Question("5π/4", 225), 
    Question("3π/2", 270), 
    Question("5π/3", 300), 
    Question("7π/4", 315), 
    Question("11π/6", 330), 
    Question("2π",360), 
] 

Auch, wenn Sie mir sagen, wie man Punktzahl für jede Frage hinzufügen richtig, die sehr geschätzt werden würden. Ich habe versucht, dies zu tun, aber ich habe bereits ein Stück des Programms, das alle 5 Sekunden von einer globalen Score-Variable 1 abzieht. Ich möchte die gleiche Variable weiter bearbeiten, aber es gibt Fehler.

+0

Ist das wirklich Ihre Einrückung? – Li357

+2

Mögliches Duplikat von [Schleifen in Python 3.4.3] (http://stackoverflow.com/questions/31445050/loops-in-python-3-4-3) oder eine beliebige Anzahl von "Fragen an den Benutzer bis ___" Fragen [1] (http://stackoverflow.com/questions/20337489/python-how-to-keep-repeating-a-program-until-a-specific-input-is-obtained), [2] (http://stackoverflow.com/questions/23294658/asking-the-user-for-in-put-until-they-give-a-valid-response), [3] (http://stackoverflow.com/questions/8114355/loop- bis zu einer bestimmten Benutzereingabe), [4] (http://stackoverflow.com/questions/12556907/continually-prompting-user-for-in-put-in-python), etc. – TessellatingHeckler

+0

Oh, mein Schlechter, es scheint versaut zu haben, wenn ich es kopiert habe, werde ich reparieren – Warstolrem

Antwort

0

Es könnte einen Versuch wert sein, geben fragen() Rückgabewert. True, wenn die Antwort richtig war und False, wenn die Antwort falsch war. Das könnte wie folgt aussehen:

def ask(self): 
    response = input(self.question) 
    if response == self.answer: 
     print "CORRECT" 
     return True 
    else: 
     print "wrong" 
     return False 

Dann sind Sie durch die Fragen wie die laufen könnte:
(! Sie würden zunächst eine Punktzahl Variable erstellen müssen)

for q in questions: 
    if q.ask() is True: 
     score += 1 
    else: 
     break #Breaks out of the while loop 

Eitherway, müssen Sie machen Sie Ihre Antworten Strings zu, um nicht einen String in einen Integer zu vergleichen (was wird nie mehr so ​​sein), so Fragen sollte wie folgt aussehen:

questions = [ 
    Question("0", "0"), 
    Question("π/6", "30"), 
    Question("π/3", "60"), 
    Question("π/4", "45"), 
    ... 

Ich hoffe ich konnte dir helfen!

0

könnten Sie Schleife durch die Liste mit einer while-Schleife so etwas wie dies möglicherweise

score = 0 
currIndex = 0 

#ask a question to start off 
q1 = questions[currIndex] 
#get the answer 
answer = q1.ask() 
while(answer == q1.answer): 
    #ask the question at this index 
    score+=1 
    q1=questions[currIndex] 
    answer = q1.ask() 

    currIndex+=1 
    #reset the loop? 
    if currIndex == len(questions)-1: 
     currIndex = 0 

habe es noch nicht getestet, aber diese funktionieren sollte? Es wird gehen, bis sie die Antwort sonst unendlich oft falsch beantworten. edit: hoppla hätte gelesen, dass nicht vollständig, würde ich richtig oder falsch zurückgeben machen stellen und dann die Schleife ändern

while (answer == "CORRECT"):