Hej, chłopaki, muszę zrobić program, który symuluje rzut monetą i podaje głowę lub liczbę. Zrobiłem to
a = rand(1..2)
if a == 1 then
puts "HEAD!"
else
puts "NUMBER!"
end
enter = gets
if enter == "n"
a = rand(1..2)
if a == 1 then
puts "HEAD!"
else
puts "NUMBER!"
end
end
ale jak mogę dołączyć za każdym razem, gdy naciśniesz enter, powinno to kontynuować i kontynuować symulację coinflip, jak ... HEAD (enter) HEAD (enter) NUMBER (enter) i tak dalej.
Odpowiedzi:
1 dla odpowiedzi № 1Potrzebujesz czegoś w rodzaju pętla, a nie tylko if
. Oto krótki sposób, aby to zrobić:
loop do
puts ["HEAD", "NUMBER"].sample
break if gets != "n"
end
Lub jeśli nie chcesz przerywać pracy, naciskając CTRL-C:
loop do
puts ["HEAD", "NUMBER"].sample
gets
end
Korzystając z testu po pętli (tj gets
i ewentualnie break
po drukowanie wyniku odwrócenia) jest tutaj bardziej odpowiednie, ponieważ pozwala uniknąć powielania kodu. Zobacz także ten popularny przewodnik po stylu Ruby:
https://github.com/bbatsov/ruby-style-guide#loop-with-break
https://github.com/bbatsov/ruby-style-guide#infinite-loop