Ruby while 循环无法正常工作
Ruby While loop not working correctly
我一直在尝试在 ruby 中创建一个 while 循环来响应用户输入。
应该发生的是,当用户正确输入单词 "Omega" 时,它会结束循环并显示一条消息,如果输入单词 "hint" 则会显示一条消息并重复循环,以及其他任何内容将显示 "try again" 消息。发生的情况是,无论输入什么,循环只会询问原始问题。
谁能找出我的代码有什么问题,谢谢
@GateOneLocked = true
GateOnePassword = String.new('Omega')
GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
puts 'What is the password?'
passwordEntered = gets.to_s
if (@passwordEntered == @GateOnePassword)
@GateOneLocked == false
else if (@passwordEntered != @GateOneHint)
puts "This is a hint: the password is 'Omega'"
puts " "
puts " "
else
puts "wrong password, try again"
puts " "
puts " "
end
end
end
puts 'You entered the correct password!'
而不是 @GateOneLocked == false
应该是 @GateOneLocked = false
补充说明:
in ruby 变量名遵循与 C#/Java 不同的约定,而不是
GateOneLocked
开发者写 gate_one_locked
不用写String.new
,variable = "your_string"
就够了(GateOnePassword = 'Omega'
)
while(@GateOneLocked)
就足够了——不需要检查它是否是 == true
我对您的代码进行了多项修复。我将 else if
更改为 elsif
并将 @
添加到缺少它的变量引用中,以便您的代码保持一致。 (实际上我会放弃它们,除非你在 class 中使用这段代码。)我将你的 @GateOneLocked == false
更改为使用 assignment 运算符而不是比较运算符。也许最重要的是,我添加了一个 chomp
调用,它将从您的用户输入中删除 \n
(换行符)。此外,我将 elsif
中的比较更改为 ==
以便您的用户可以请求提示,这正是我认为您的意图。
@GateOneLocked = true
@GateOnePassword = String.new('Omega')
@GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
puts 'What is the password?'
@passwordEntered = gets.chomp.to_s
if (@passwordEntered == @GateOnePassword)
puts "abc"
@GateOneLocked = false
elsif (@passwordEntered == @GateOneHint)
puts "This is a hint: the password is 'Omega'"
puts " "
puts " "
else
puts "wrong password, try again"
puts " "
puts " "
end
end
puts 'You entered the correct password!'
我一直在尝试在 ruby 中创建一个 while 循环来响应用户输入。 应该发生的是,当用户正确输入单词 "Omega" 时,它会结束循环并显示一条消息,如果输入单词 "hint" 则会显示一条消息并重复循环,以及其他任何内容将显示 "try again" 消息。发生的情况是,无论输入什么,循环只会询问原始问题。
谁能找出我的代码有什么问题,谢谢
@GateOneLocked = true
GateOnePassword = String.new('Omega')
GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
puts 'What is the password?'
passwordEntered = gets.to_s
if (@passwordEntered == @GateOnePassword)
@GateOneLocked == false
else if (@passwordEntered != @GateOneHint)
puts "This is a hint: the password is 'Omega'"
puts " "
puts " "
else
puts "wrong password, try again"
puts " "
puts " "
end
end
end
puts 'You entered the correct password!'
而不是 @GateOneLocked == false
应该是 @GateOneLocked = false
补充说明:
in ruby 变量名遵循与 C#/Java 不同的约定,而不是
GateOneLocked
开发者写gate_one_locked
不用写
String.new
,variable = "your_string"
就够了(GateOnePassword = 'Omega'
)while(@GateOneLocked)
就足够了——不需要检查它是否是== true
我对您的代码进行了多项修复。我将 else if
更改为 elsif
并将 @
添加到缺少它的变量引用中,以便您的代码保持一致。 (实际上我会放弃它们,除非你在 class 中使用这段代码。)我将你的 @GateOneLocked == false
更改为使用 assignment 运算符而不是比较运算符。也许最重要的是,我添加了一个 chomp
调用,它将从您的用户输入中删除 \n
(换行符)。此外,我将 elsif
中的比较更改为 ==
以便您的用户可以请求提示,这正是我认为您的意图。
@GateOneLocked = true
@GateOnePassword = String.new('Omega')
@GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
puts 'What is the password?'
@passwordEntered = gets.chomp.to_s
if (@passwordEntered == @GateOnePassword)
puts "abc"
@GateOneLocked = false
elsif (@passwordEntered == @GateOneHint)
puts "This is a hint: the password is 'Omega'"
puts " "
puts " "
else
puts "wrong password, try again"
puts " "
puts " "
end
end
puts 'You entered the correct password!'