如何用Ruby正确地编写代码?以便生成正确的输出?

k5ifujac  于 2023-01-25  发布在  Ruby
关注(0)|答案(4)|浏览(179)

我想做类似的事。

puts "Please write your age: "
age = gets.chomp

if #{age}<18 
puts "you are illegal"

else #{age}>18
puts "You are legal"
end

i得到输出是:
"请写上你的年龄" 15.你是非法的你是合法的"
还有这个
"请写上你的年龄20岁你是非法的你是合法的"
为什么?那解决办法是什么?
我所期望的是如果我写19或以上,它会说"你是合法的"如果我写17或以下的任何数字,它会告诉我"你是非法的"

ogq8wdun

ogq8wdun1#

欢迎来到StackOverflow。
#{}用于字符串插值,不需要它,else语句不像这样工作(elsif可以),还需要将字符串转换为整数,可以这样写:

puts "Please write your age: "
age = gets.chomp.to_i

if age > 18 # Since you want 19 or older. You could use age > 17 or age >= 18 if you actually meant 18 or older.
  puts "You are of legal age"
else
  puts "You are not of legal age"
end

See

rryofs0p

rryofs0p2#

问题是你的代码等价于:

puts "Please write your age: "
age = gets.chomp

if 
puts "you are illegal"
else
puts "You are legal"
end

因为#开始一个注解,这使得解释器忽略该行注解之后的所有内容。
您可以使用其他答案中的任何建议来修复代码。

aemubtdh

aemubtdh3#

age = gets.chomp.to_i

if age<18

...进行整数对整数比较。

7tofc5zh

7tofc5zh4#

首先应该将输入类型转换为Integer,然后进行逻辑运算,注意检查字符串输入是否为数值也很重要(因为to_i'a'.to_i这样的情况下返回0),可以这样做:

puts 'Please write your age: '
# strip removes leading and trailing whitespaces / newlines / tabs
age = gets.strip

unless age.to_i.to_s == age
  puts 'Age must be a number'
  exit
end

age = age.to_i

if age < 18 
  puts 'you are illegal'
else
  puts 'You are legal'
end

相关问题