如何检测整句是否大写?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
相关产品推荐
相关产品推荐

