Ruby - 直到循环似乎没有正常工作

时间:2016-11-11 08:11:54

标签: ruby

嘿,我是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

2 个答案:

答案 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

到你方法的顶部。