2010-10-06 13 views
8

Dobra, próbuję napisać symulator ruby ​​mojej babci. Nie mogę jednak uruchomić pętli tak, jakbym chciał. Chcę babcia reagować zRuby Loops with Babcia

„Och, to kojarzy mi się z powrotem w (losowy rok) ...”

gdy odbierasz ją we wszystkich czapki, ale ja też chcę, żeby odpowiedzieć

"CO MÓWIASZ ???"

jeśli nie używasz wszystkich czapek. Mogę sprawić, by każdy pracował osobno, ale nie mogę sprawić, by ciągła pętla babci z jej szalonymi odpowiedziami. Oto kod:

puts 'HELLO SONNY! WHAT\'S NEW IN THE WHO\'S IT WHAT\'S IT?' 
response = gets.chomp 

while response == response.upcase 
    puts 'OH, THAT REMINDS ME OF BACK IN ' + (rand(50) + 1905).to_s + '...' 
    response = gets.chomp 
end 

while response != response.upcase 
    puts 'WHAT\'D YOU SAY????' 
    response = gets.chomp 
end 

Jakieś pomysły?

+3

Wysiąść z mojego trawnika! –

+0

Ponieważ oczywiście zacząłeś już uczyć się Ruby (zacząłem od tego samego samouczka), chciałem tylko zwrócić uwagę, że nie musisz uciec od znaków w ciągu, jeśli używasz podwójnych cudzysłowów zamiast pojedynczych cudzysłowów. Jest to wygodne w takich prostych sytuacjach. –

Odpowiedz

7

Problem polega na tym, że po wyjściu z pierwszej pętli, nigdy nie wrócisz do niej. Spróbuj czegoś takiego:

while true 
    response = gets.strip 
    if response == response.upcase 
    puts msg1 
    else 
    puts msg2 
    end 
end 

To będzie działać wiecznie, dopóki nie zdecydujesz się zabić wirtualnej babci za pomocą Ctrl-C.

+0

Świetnie, to ją naprawiło! Jakieś korzyści z używania .strip over .chomp? – 585connor

+0

Podoba mi się, ponieważ prowadzi zarówno do początkowych, jak i końcowych spacji, gdzie chomp po prostu ciągnie za sobą nowe linie. W tym przypadku jednak tak naprawdę nie potrzebujesz. – perimosocordiae

+0

"zabij wirtualną babcię" - to po prostu źle ... –

0

Ten program działa, chociaż jestem noobem, więc może nie być najlepszym sposobem. Również moja matematyka jest bardziej twórcza niż praktyczna, inni faceci są o wiele lepsi. :)

puts 'Talk to your grandma!' 

while true 
    say = gets.chomp 

    if say == say.downcase 
    puts 'WHAT DID YOU SAY? SPEAK UP!' 

    else say == say.upcase 
    puts "NO HONEY, NOT SINCE 19" + (rand(90) + 10).to_s 

    end 

    break if say == 'bye'.upcase 

end