2016-11-11 75 views
0

嘿家伙我是新来的红宝石,所以道歉,如果这似乎是一个愚蠢的问题,似乎无法弄清楚我做错了什么。红宝石 - 直到循环似乎没有正常工作

我一直在努力寻找网上寻求帮助,也不确定要在没有写出关于该问题的小说的情况下搜索什么。

该代码的目的是不断询问用户的输入,直到他们输入一个字母,我通过检查用户输入是否在数组“字母表”中来检查它,当他们这样做时它应该检查它“字”来检查信是我随机选择其他地方的字内(我试图代码刽子手,仅适用于上下文)

下面的代码:

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 

在控制台,它只是出现了“请猜字母表中的一个字母”,然后当我输入一个字母时,它只是重提问题。我甚至尝试输出“猜测”来检查它是否正确得到了值,并且不知道发生了什么。

任何帮助将不胜感激!

编辑:

def Check_Alph()  
    guess == nil 
    until $alphabet.include?(guess) 
     puts "Please guess a letter from the alphabet" 
     guess = gets.chomp 
     puts "#{guess}" 
    end  
end 
+1

'== true'不仅是多余的。在这个例子中(没有括号)它实际上导致了一个错误,因为'=='比方法调用有更强的绑定。 Ruby读取这样的行:'$ alphabet.include?('guess'== true)',显然与'$ alphabet.include?(false)'相同。并且由于'$ alphabet'包含字符,这将始终返回'false'。 – spickermann

回答

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 

到您的方法的顶部。

+0

唯一的问题:'guess'设置了'until'块内,所以这会给出一个'NameError'。 – Stefan

+0

我没有你所说的话(编辑入主后,所以你可以看到),我得到一个新的错误: “在‘Check_Alph’:未定义的局部变量或为主要方法‘猜测’:对象(NameError)” 任何想法有什么错呢?由于我在一开始就知道应该没事我以为 – flanelman

+0

@flanelman宣布它:请改变'猜测== nil'到'猜测= nil'。 '=='检查是否相等,而'='赋值。而你需要指定'nil'为'guess'定义本地变量'guess'。 – spickermann

1

你循环,直到$字母表包含字符串 “猜测”。 但是在循环中,您不会添加任何内容到$字母表,因此循环无法终止,并且您的if将永远无法执行。

+0

更糟。他循环直到“$ alphabet”包含“false”。请看我上面的评论。 – spickermann