编程可能令人困惑。 Ruby语言

时间:2016-04-18 19:01:49

标签: ruby-on-rails ruby

我在这里是因为我最近决定改变职业生涯,并且考虑到我的父母都是程序员,我一直想尝试学习编码。

我想申请旧金山一所名为App Academy的小学院,但为了向前迈进,我必须为他们通过考试。他们的网站是: http://www.appacademy.io/

我最近一直在阅读很多,试图准备他们的考试,但不知怎的,我仍然在努力从中获得逻辑。我觉得有很多不同的编程方式,有时候几乎没有限制。

简而言之,这是我的问题:

编写一个需要几分钟的方法,并返回一个将数字格式化为hours:minutes的字符串。

def time_conversion(minutes)

end

我在努力的地方是,我永远不知道从哪里开始。每当我以某种方式攻击新问题时,我都无法弄清楚逻辑。在这个问题上,请不要提供答案,因为我想亲自尝试一下。但是,我真的很感谢学习一种方法来帮助解决每个问题。

例如,我在这里首先意识到每小时都有60分钟,所以在某些时候我必须在答案中加入。我必须创建一个循环吗?我认同。请记住,我不知道怎么写...也许是这样的:

def time_conversion(minutes)

  i = 0

  while i > 60

  return hours of integer i % 60 

  return minutes of remainder * 60

  else return minutes of remainder * 60

  end 

我确定我错了......请帮助!逻辑是否朝着正确的方向发展?

5 个答案:

答案 0 :(得分:5)

你将不得不在这里工作。使用sprintf方法可以轻松地格式化字符串,但是您如何知道要放入哪些内容?这是目标:

sprintf("%d:%02d", hours, minutes)

计算给定秒数的小时和分钟只需要数学:

hours = minutes / 60
minutes = minutes % 60

然后你可以将这两者结合起来得到你的结果。

答案 1 :(得分:3)

你可能会过度思考这个问题。以下方法怎么样?

def minutes_timestamp(minutes)
  "%d:%.2d" % [minutes/60, minutes % 60]
end

修改

tadman的回答也是正确的。上面的例子相当于:

def minutes_timestamp(minutes)
  sprintf("%d:%.2d", minutes/60, minutes % 60)
end

"%d:%.2d"语法有点神秘,但它只是确保生成的字符串符合HH:MM格式,同时还确保单个数字分钟的前导零。有一个很棒的教程可以解释sprintf和字符串格式比我在这里更好:https://blog.udemy.com/ruby-sprintf/

答案 2 :(得分:2)

欢迎使用Stack Overflow。学习编程是一项非常困难的任务,因为您必须改变处理问题的方式。在开始学习逻辑之前,您还需要了解您正在学习的语言的语法。在你的情况下,return语句将退出该函数,因此不允许你去分钟部分。

我只能推荐这本书http://poignant.guide/作为Ruby的一个开始,因为它非常有趣(至少对我而言)。它将帮助您理解一种语言。之后你应该尝试解决逻辑/方法问题,因为你知道你可以使用什么。

为了找到解决方案,我只建议您使用笔和纸,并在那里找到解决方案。在确定人为逻辑之后,尝试假装您是一台只能访问数据(在纸上书写并通过名称识别)和您知道代码可以执行的操作的计算机,并在每次操作后标记数据中的更改。

即。你作为人类知道1,3,5,7,9 ...是奇数,但是给出一个数字x你怎么知道它在代码中是奇数?这很简单:is_odd = x%2 == 1所以每当你必须检查某些东西是否奇怪时,你就可以使用那部分代码。因此,我的建议是尝试将问题更多地作为一个机器而不是人类来解决。

答案 3 :(得分:2)

暂时忽略计算机所涉及的事实,假装你向没有任何常识的人发出指示,他们会按照你的指示写信。

你希望这个人为你做什么?在这种情况下,将一个数字(分钟)转换成两个数字(一个小时,然后剩下几分钟),然后将它们并排放在它们之间用冒号。

因为如何做到这一点并不是很明显,你可以将其分解:

  1. 你怎么能把几分钟变成几个小时(忽略余数,格式等)?
  2. 一旦您将某些会议记录表示为小时数,您如何算出剩余的分钟数?
  3. 一旦有了这两个数字,如何将它们打包成所需的输出表示?
  4. 如果这些步骤太复杂而无法写下答案,请将每个步骤分解,等等。计算机代码仅仅是设计的最终印记。

答案 4 :(得分:0)

minutes = 246
"%02d:%02d" % minutes.divmod(60) #=> "04:06"

Fixnum#divmod不受尊重。