gpt4 book ai didi

ruby - 如何验证 Ruby 中多选提示的命令行输入?

转载 作者:行者123 更新时间:2023-12-05 08:45:10 26 4
gpt4 key购买 nike

我正在编写一个多项选择测验,用户必须通过输入来自 a 的字母来选择答案。至 d .每个问题提示如下所示:

What is the last letter in alphabet?
(a) Y
(b) R
(c) Z
(d) Q

如果用户输入任何其他内容,我想显示一条消息并再次打印整个问题,直到输入为 a , b , cd .

这是我尝试过的:(简化)

question = "What is the last letter in alphabet?\n(a) Y\n(b) R\n(c) Z\n(d) Q"

puts question
answer = gets.chomp.to_s
while answer > "d"
puts "Please enter a, b, c, or d"
puts
puts question
answer = gets.chomp.to_s
end

输入 e 时工作正常, f , g等,但它不会捕获像 ab 这样的输入, 1 , Z ,或者当用户按下回车键时。

最佳答案

您的方法无效,因为 answer > "d"使用它们的 (Unicode) 代码点按字符比较两个字符串。要了解这意味着什么,请查看 Basic Latin chart。 : (相当于一个ASCII表)

Basic Latin chart

“d”的代码点为 U+0064。任何较小的代码点——即图表中“d”之前的每个字符——都被认为更小。这包括所有(常规)数字、所有(基本拉丁语)大写字母和几个符号:

"0" > "d"  #=> false
"Z" > "d" #=> false

您可以添加一个下限,例如 answer < "a" || answer > "d"但这仍然允许所有字符串以允许的字符之一开始,例如:

"apple" < "a" || "apple" > "d" #=> false

要实际将答案限制为四个允许的值,您必须将字符串与每个值进行比较。您可以结合这些比较:

answer == 'a' || answer == 'b' || answer == 'c' || answer == 'd'

对允许值数组使用循环:

['a', 'b', 'c', 'd'].any? { |letter| answer == letter }

检查数组是否包含答案:

['a', 'b', 'c', 'd'].include?(answer)

# or

%w[a b c d].include?(answer)

或者用正则表达式匹配ad :

answer.match?(/\A[a-d]\z/)

请注意,如果 answer 则上述示例为真 a 之间和 d .您可以通过 !(...) 否定条件:

while !(%w[a b c d].include?(answer))
# ...
end

或使用 until而不是 while :

until %w[a b c d].include?(answer)
# ...
end

关于ruby - 如何验证 Ruby 中多选提示的命令行输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73824377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com