为什么我的Ruby代码未按预期执行?

时间:2019-06-13 23:34:42

标签: ruby

我正在通过Chris Pine的《学习编程》一书来学习Ruby。书中有一个练习,写着:

编写聋人奶奶计划。无论您对奶奶说什么(无论您键入什么内容),她都应该以呵呵回应!!快点说话,SONNY !,除非您大喊大叫(输入所有大写字母)。如果您大喊,她会听到您的声音(或者至少她是这么认为的),然后大喊大叫,不,自1938年以来!为了使您的程序真正可信,每次让奶奶大喊一遍。可能是1930年至1950年之间的任意一年。(这部分是可选的,如果您在方法一章的末尾阅读Ruby的随机数生成器这一节,将会更加容易。)喊再见。 提示:不要忘了排骨!带回车的“再见”与没有输入的“再见”不同! 提示2:尝试考虑程序的哪些部分应反复进行。所有这些都应该在您的while循环中。

我已经编写了代码,但无法正常工作。基本上,当我输入信息时,它遵循代码编写的顺序。例如,如果我输入“ HELLO”,它会回答“ HUH ?! SPEAK UP,SONNY !,但实际上它应该写回“ NO,NOT SINCE SINCE 1938 !!”。

当我输入“ BYE”时,除非遵循代码编写的顺序,否则什么都不会出现(我希望这是有道理的)。

我尝试了很多事情,例如不使用break(用于循环)。我试图将其编写为一个很长的代码,没有任何if或else的代码。

这是我编写的代码:

#!/bin/bash

gnome-terminal -e sudo systemctl start firmwared.service
sphinx /opt/parrot-sphinx/usr/share/sphinx/drones/bebop2.drone &

gnome-terminal -e source ~/bebop_ws/devel/setup.bash
roslaunch bebop_driver bebop_node.launch ip:=10.202.0.1

我希望在写HELLO时得到正确的答案:“不,自1983年以来!”。另外,我希望对话能够继续进行,因为我在所有代码段上都使用了gets.chomp。 Sp为什么代码停止了?

1 个答案:

答案 0 :(得分:1)

代码中的问题是if ... else条件没有包装在循环中,因此不会重复执行。

  

提示2:尝试考虑程序的哪些部分应该发生   再三,一而再再而三。所有这些都应该在您的while循环中

要使循环有效,您需要将所有可重复的行包装在循环中。
在您的情况下,仅当输入为BYE

时,循环才应中断
puts 'Go speak to Grandma, she\'s in the kitchen!'
speaking = gets.chomp

until speaking == 'BYE'
  if speaking == speaking.upcase
      puts 'NO, NOT SINCE 1983!'
  else
      puts 'HUH?! SPEAK UP, SONNY!'
  end

  # Get input before next loop
  speaking = gets.chomp
end

puts 'BYE! COME AGAIN SOON!'

您不需要显式检查小写字母,只需关心“输入的内容是否仅包含大写字母”