2017-09-19 113 views
0

我想寫一些代碼(使用while循環),它將生成隨機數(1和10之間),直到生成數字7。生成隨機數直到某個

這裏是我這麼遠,但它只是停留在打印隨機數1和10

num = "" 
while num != 7 
    print rand(1..10).to_s 
end 
puts "over" 

我明白爲什麼它沒有循環端之間的循環,但我不能確定如何產生隨機數,並且當出現7時仍然結束循環。

+0

_「我理解爲什麼它的循環沒有結束」 _ - 你有什麼感想爲什麼它沒有結束? – Stefan

回答

0

比較此代碼的問題是,因爲num是永遠「你產生無限循環」,你需要更新while循環中變量num是這樣的:在這種情況下

num = "" 
while num != 7 
    num = rand(1..10) 
    puts num 
end 
puts "over" 

,你不知道什麼時候該循環將停止,但在每個迴路可以以概率1/10停止,這不是一個很好的習慣,你需要知道什麼時候循環停止,所以最好爲這樣的最大嘗試次數添加一個變量。而且你不需要改造D出現數字符串打印:

num = 0 
max_tries = 100 
try = 1 
guess = 7 

while (try < max_tries && num != guess) 
    num = rand(1..10) 
    try = try + 1 
    puts num 
end 

if (try >= max_tries) 
    puts "you do not get the guess" 
else 
    puts "over" 
end 

,你會得到這樣的:

[4] pry(main)> 9 
9 
3 
4 
9 
6 
9 
8 
4 
5 
9 
10 
4 
3 
7 
over 
=> true 
+1

感謝您在那裏增加的教訓。 ,但是我喜歡你添加的額外位,你會得到答案 –

+1

不應該在某處增加'try'嗎? – Stefan

+0

對不起,我忘了更新,嘗試每次循環傳遞,謝謝@Stefan – anquegi

0

嘗試了這一點

$num = 0 
while $num != 7 
    $num = rand(1..10) 
    print $num.to_s + "\n" 
end 
puts "over" 
0

你必須指定蘭特生成的值到num變量,

$ num = '' 
$ while num != 7 
$ num = rand(1..10) 
$ print num 
$ end 
$ # 6168510267=> nil 
2

有很多方法可以做到這一點,例如:

loop do 
    num = rand(1..10) 
    print num 
    break if num == 7 
end 

此外,爲了使您的代碼工作:

num = "" 
while num != '7' 
    num = rand(1..10).to_s 
    print num 
end 
puts "over" 

原因在你轉換num爲字符串,並將其與integer

2
puts (number = rand(1..10)) until number == 7 
+0

在這種情況下,您應該預先定義'number' :) –

+1

@AlexGolubenko,修正:) – ndn

+0

'to_i'是多餘的。並且它可能更清晰地表達OP的要求_「直到數字7」_作爲'數字== 7';-) – Stefan