嘿,我是Ruby的新手,如果这看起来像一个愚蠢的问题,请道歉,似乎无法弄清楚我做错了什么。
我一直在努力寻找网上寻求帮助,而不是在没有写一篇关于这个问题的小说的情况下确定要搜索什么。
代码的目的是不断询问用户输入,直到他们输入一个字母,我这样做是通过检查用户输入是否在数组" alphabet"当他们这样做时,应该检查它" word"检查这封信是否在我随机选择的其他地方(我试图编写刽子手,只是为了上下文)
这里是代码:
def Check_Alph(word)
until $alphabet.include? 'guess' == true
puts "Please guess a letter from the alphabet"
guess = gets.chomp
puts "#{guess}"
end
if $alphabet.include? 'guess' == true
puts "valid letter entered, checking.."
$guessed_Letters << guess
if word.include? 'guess' == true
puts "good guess! That letter was in the word!"
puts "Letters confirmed to be in word: #{correct_Letters}"
end
end
end
在控制台中,它刚出现&#34;请猜一下字母表中的字母&#34;然后,当我输入一封信时,它只是重新提问。我甚至尝试过输出&#34; guess&#34;检查它是否正确获得了价值,并且确实不确定是什么进行了。
非常感谢任何帮助!
编辑:
def Check_Alph()
guess == nil
until $alphabet.include?(guess)
puts "Please guess a letter from the alphabet"
guess = gets.chomp
puts "#{guess}"
end
end
答案 0 :(得分:1)
你循环直到$ alphabet包含字符串&#34; guess&#34;。 但是在循环中,你不会在$ alphabet中添加任何东西,所以循环永远不会终止而你的if永远不会被执行
答案 1 :(得分:1)
有两个问题。
首先,变量guess
与字符串'guess'
不同。但是你检查$alphabet
是否包含字符串,而不是变量的值。
第二个$alphabet.include? 'guess' == true
会导致错误,因为==
的绑定比方法调用更强。 Ruby读取这一行$alphabet.include?('guess' == true)
。由于'guess'
或变量guess
永远不会等于true
,因此它与$alphabet.include?
(false)相同。
正如其他人已经指出的那样,根本不需要检查== true
,因为include?
已经返回了一个布尔值。
更改
until $alphabet.include? 'guess' == true
到
until $alphabet.include?(guess)
此外,您需要在启动guess
块之前定义until
,否则它将是未知的并引发错误。只需插入
guess = nil
到你方法的顶部。