Frage Wie wiederhole ich eine Anfrage für Benutzereingaben, bis der Benutzer die richtigen Informationen eingibt?


Ich bin ein Anfänger, der versucht Ruby zu lernen. Ich habe einige der leichteren Sachen bis jetzt gelernt, aber ich scheine fest daran zu sein, einige der Dinge, die ich gelernt habe, zu kombinieren.

Was ich versuche, ist, dem Benutzer eine Frage zu stellen und sie entweder 1 oder 2 einzugeben. Eine einfache if-Anweisung würde mich mit einer Option antworten lassen, wenn sie 1 eingeben, und einer anderen Option, wenn sie 2 eingeben sie geben etwas ganz anderes ein, wie eine andere Zahl, eine Saite usw. Wie kann ich sie dazu bringen, es erneut zu versuchen und sie zur ursprünglichen Frage zurückführen zu lassen?

Was ich bisher gesehen habe, sieht ungefähr so ​​aus.

prompt = "> " 
puts "Question asking for 1 or 2." 
print prompt
user_input = gets.chomp.to_i

if user_input == 1    
   puts "One response." 
elsif user_input == 2   
   puts "Second response." 
else    
   puts "Please enter a 1 or a 2." 
end

Hier stecke ich fest. Wie mache ich es zurück zur "Frage nach 1 oder 2"? bis der Benutzer eine 1 oder 2 eingibt? Ich weiß, dass es wahrscheinlich eine Art von Schleife ist, aber ich kann nicht herausfinden, welche Art zu verwenden und wie man die Benutzereingabe wiederholt (wenn nötig) einbaut, bis die gewünschte Eingabe erhalten wird. Jede Hilfe würde sehr geschätzt werden. Vielen Dank.


6
2017-12-04 22:11


Ursprung


Antworten:


Sie haben Recht, dass Sie Ihren Code in einer Schleife ausführen müssen. Verwendung einer while Schleife mit gets.chomp Als Bedingung können Sie weiter nach Benutzereingaben fragen, bis Sie sich entscheiden, was Sie wollen.

In diesem Fall möchten Sie die Antwort auf die Frage validieren und erneut fragen, ob sie ungültig ist. Sie müssen nicht viel ändern, außer sicherzustellen, dass Sie aus der Schleife ausbrechen, wenn die Antwort richtig ist. Wenn die Antwort falsch ist, drucken Sie die Eingabeaufforderung erneut aus.

Dies ist eine leicht umgestaltete Version, die verwendet case stattdessen, aber es zeigt, was Sie tun müssen. Es gibt keinen Zweifel, ein sauberer Weg, dies zu tun ...

prompt = "> "
puts "Question asking for 1 or 2."
print prompt

while user_input = gets.chomp # loop while getting user input
  case user_input
  when "1"
    puts "First response"
    break # make sure to break so you don't ask again
  when "2"
    puts "Second response"
    break # and again
  else
    puts "Please select either 1 or 2"
    print prompt # print the prompt, so the user knows to re-enter input
  end
end

6
2017-12-04 22:25



    user_input = 0
    until [1,2].include? user_input do
        puts "Please enter a 1 or a 2.>" 
        user_input = gets.chomp.to_i
    end
    if user_input == 1    
        puts "One response." 
    else   
        puts "Second response." 
    end

Sie können dies versuchen, um Ihren Code sauber zu machen.


1
2017-12-04 22:22



Versuchen Sie es mit dem until Methode wie folgt:

prompt = "> " 
print prompt

user_input = nil
until (user_input == 1 or user_input == 2)
    puts "Please enter a 1 or 2." 
    user_input = gets.chomp.to_i
end



if user_input == 1    
   puts "One response." 
elsif user_input == 2   
   puts "Second response." 
else    
   puts "Please enter a 1 or a 2." 
end

1
2017-12-04 22:23



Während der Titel dieser Frage nicht verwandt ist, sehen Sie sich den Trick an, der hier verwendet wird: Ruby Wiederholen und sicherstellen, dass der Block nicht funktioniert

Die Verwendung von Fehlererkennung und einzigartig retry Mit dem in Ruby verfügbaren Schlüsselwort können Sie leicht eine Wiederholungsschleife kompilieren und eine Fehlerbehandlung durchführen.

Beachten Sie jedoch, dass das Beispiel, auf das ich hingewiesen habe, nicht wirklich das Beste ist. Es gibt einige kleinere Probleme. Zum Beispiel sollten Sie nicht fangen Exception, ziemlich einfach rescue => e wäre genug. Aber die allgemeine Idee sollte ziemlich klar sein.


0
2017-12-04 22:38