我无法运行我的代码。
我想写下50个单词,但偶数单词[0,2,4,6,8,...]
全部为大写,奇数单词为小写。
还有哪些其他编写代码的方法?我应该开始一个新阵列并拥有index = []
吗?
words = []
50.times do
puts "Please enter a word:"
words << gets.chomp
end
puts "These are your wonderful words. You are smart. Keep it up."
%w(words).each_with_index {|word, index|}
if index = word.even?
puts word.upcase
if index = word.odd?
puts word.downcase
end
答案 0 :(得分:1)
您无法使用%w(words)
:
words # => ["a", "b"]
%w(words) # => ["words"]
%w(...)
将每个以空格分隔的字符串转换为数组中单独的String元素:
%w(a 1) # => ["a", "1"]
您不能以这种方式将words
变量插入到数组中。没有理由,因为你已经在words
数组中已经有一个String元素数组,因为你已经说过它是一个使用的数组:
words = []
和
words << gets.chomp
这不是好代码:
if index = word.even?
puts word.upcase
if index = word.odd?
puts word.downcase
您无法使用=
测试相等性。相反,这是分配。 Ruby不是解释BASIC:
a = 1 # => 1
a == 2 # => false
你不能word.even?
或word.odd?
,因为单词不是偶数或奇数,只有整数。
1.even? # => false
1.odd? # => true
'foo'.even? # =>
# ~> -:3:in `<main>': undefined method `even?' for "foo":String (NoMethodError)
此外,您需要使用结束end
语句。
更正了如下:
if index.even?
puts word.upcase
end
if index.odd?
puts word.downcase
end
但这可以写得更简洁明了:
folded_word = if index.even?
word.upcase
else
word.downcase
end
puts folded_word
答案 1 :(得分:0)
这里有几件事。
您在=
语句中使用if
将它们设置为相等。您需要使用==
来测试相等性,而一个=
设置相等性。如果您使用两个end
语句,那么您还错过了if
,因此请使用if
/ else
:
word = ["letter","booyah","sorry"]
word.each_with_index do |value, index|
if index % 2 == 0 #(this is a modulo, when no remainder it is even)
puts value.upcase
else
puts value.downcase
end
end
结果是:
LETTER
booyah
SORRY
此外,除非您先在chomp
数组中添加某些内容,否则无法定义word
方法。
答案 2 :(得分:0)