我正在尝试为“学习计划”一书中的练习为“99瓶啤酒在墙上”编写一个Ruby循环。我究竟做错了什么?我有以下内容:
def bottles_of_beer
i = 99
while i < 99 and i > 0
puts "#{a} bottles of beer on the wall. #{a} bottle of beer."
i = i - 1
puts "Take one down, pass it around. #{i} bottle of beer on the wall."
end
end
答案 0 :(得分:3)
您在第一个字符串中引用了未定义的变量a
。
答案 1 :(得分:2)
我已经简化了你的代码:
i = 99
while i < 99 and (anything else)
(anything)
end
试试看你现在是否可以搞清楚。
答案 2 :(得分:1)
您的代码存在许多问题,其中 i 的起始值等于99,因此从不评估代码块的其余部分。即使你解决了这个问题, a 总是为零,因为你从不为它分配任何内容。
有很多方法可以做到这一点,但您可能希望使用>=或<=方法进行比较。
使用Integer#downto和一个块将更加惯用。例如:
12.downto(1) { |count| p "#{count} bottles of beer on the wall..." }
p "You drank the whole case!"
答案 3 :(得分:0)
...也许
99.downto(1) do |i|
puts "#{i} bottle#{i==1 ? '' : 's'} of beer on the wall, #{i} bottle#{i==1 ? '' : 's'} of beer!"
puts "Take one down, pass it around, #{i-1} bottle#{i-1==1 ? '' : 's'} of beer on the wall!"
end
答案 4 :(得分:0)
为了给你一个明确的答案,你的代码没有产生输出的原因有三个
您将i
设置为99,然后循环while i < 99 and i > 0
,因此永远不会执行循环。由于您始终递减 i
,因此不需要while i > 0
将变量a
插入到正在打印的字符串中。由于您尚未声明它,您的程序将拒绝运行,请说undefined local variable or method 'a'
您实际上从未调用您的方法。
解决这三个问题给出了这个(非惯用的,但有效的)程序
def bottles_of_beer
i = 99
while i > 0
puts "#{i} bottles of beer on the wall. #{i} bottle of beer."
i = i - 1
puts "Take one down, pass it around. #{i} bottle of beer on the wall."
end
end
bottles_of_beer