You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测整句是否大写?Ruby条件判断代码异常排查

嘿,来解决你的大写检测代码问题啦!

首先,你的代码有两个核心问题,导致多单词输入时没触发预期的提示:

1. Ruby的capitalize方法和你想的不一样!

你可能以为input.capitalize会把每个单词的首字母都大写,但其实它只会把整个字符串的第一个字符转大写,剩下所有字符全转小写。举个实际例子:

  • 输入单个单词"hello",input.capitalize得到"Hello",和你输入的大写版匹配,所以触发SHOW SOME RESPECT;
  • 输入多单词句子"Hello World",input.capitalize会变成"Hello world",和原输入"Hello World"不相等,第一个条件就不成立;
  • 只有当你输入全大写内容(比如"HELLO WORLD")时,才会触发第二个SPEAK UP的提示。

2. 循环一开始就用了未定义的变量!

你代码开头先问了名字存到name里,但完全没用到这个变量;更关键的是,while循环里直接用了input变量,可这时候input还没被赋值,运行时会直接报错NameError,这也是个隐形bug。


修复后的代码(根据你的需求选)

如果你要检测「仅第一个字符大写,其余全小写」

要是你的需求就是判断输入是否是“首字母大写,剩下全小写”的格式(不管单词数量),那只要修复变量初始化的问题就行:

puts "What's your name?"
name = gets.chomp  # 要是不需要名字,直接删掉这两行也行

# 先给input初始值,避免未定义错误
input = ""
while input != "I love you aunty, I have to go now" do
  puts "Say something"
  input = gets.chomp
  if input == input.capitalize
    puts "SHOW SOME RESPECT"
  elsif input == input.upcase
    puts "SPEAK UP"
  end
end

如果你要检测「每个单词首字母都大写(标题式写法)」

要是你想判断输入的每个单词首字母都大写(比如"Hello World"这种),那得先把输入的每个单词都转成首字母大写的格式,再和原输入对比:

puts "What's your name?"
name = gets.chomp

input = ""
while input != "I love you aunty, I have to go now" do
  puts "Say something"
  input = gets.chomp
  # 把每个单词首字母大写,其余小写后拼回去
  title_cased_input = input.split.map(&:capitalize).join(' ')
  if input == title_cased_input
    puts "SHOW SOME RESPECT"
  elsif input == input.upcase
    puts "SPEAK UP"
  end
end

额外小建议

要是你希望其他不符合条件的输入也有提示,可以加个else分支,比如:

else
  puts "Hey, use proper capitalization please!"

另外,那个没用的name变量,要是不需要就直接删掉吧,省得冗余~

内容的提问来源于stack exchange,提问作者Benjamin Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:07:18