【问题标题】:**UPDATED** Python Programming based on user-defined methods**更新**基于用户定义方法的 Python 编程
【发布时间】:2020-11-21 20:46:24
【问题描述】:

有人可以帮助我使用我应该使用的正确代码吗?我还没弄明白。


我在下面发布了代码以及我在下面收到的错误结果。有些年龄报告不正确。有人可以帮我提供正确的代码吗?感谢您抽出宝贵时间并提供任何帮助。

下面有人帮我算出他们的生日。

(莎拉 = 2000/08/01,埃里克 = 2009/08/02,卡特 = 2009/07/28,乔治亚 = 2005/09/01)


这是代码:

from datetime import date

class Person:
  def __init__(self, name, birthdate):
    self.name = name
    self.birthdate = birthdate
  


def get_age(self):
    birthdate = self.birthdate
    today = date.today()
    if today.month >= birthdate.month and today.day >= birthdate.day:
        self.age = (today.year - birthdate.year)
    else:
        self.age = (today.year - birthdate.year) - 1
    return self.age

这是结果(一些年龄测试未通过):

#TEST 1#
sara.get_name() returned Sara
inputs:

outputs:
----------
#TEST 2#
sara.get_height() returned 160
inputs:

outputs:
----------
#TEST 3#
sara.get_age() returned 20
inputs:

outputs:
----------
#TEST 4#
sara.get_description() returned Sara is 160 cm high and is 20 years old.
inputs:

outputs:
----------
#TEST 5#
eric.get_age() returned 10
inputs:

outputs:
----------
#TEST 6#
** ERROR **carter.get_age() returned 10
* EXPECTED * 11
inputs:

outputs:
----------
#TEST 7#
georgia.get_age() returned 14
inputs:

outputs:

【问题讨论】:

  • 尝试将代码精简到导致问题的特定部分是一个好主意,以使您的问题更加集中。见stackoverflow.com/help/minimal-reproducible-example
  • @CrazyChucky 没问题。我不知道,但感谢您通知我
  • 我更新了我的帖子,只有代码和错误
  • today.month >= birthdate.month or today.day > birthdate.day 可能不是您想要的。当比较今天的 7 月 31 日和 8 月 15 日的生日时,它会评估为True。我会计算并比较自 Unix 时代以来的儒略天数或秒数,但这实际上取决于你的老师的期望。如果您可以将作业的完整文本放入您的问题中,那将有所帮助。
  • 单个if,如果为True,则创建并设置self.age,但如果False也不是您想要的,则根本不创建self.age

标签: python python-3.x python-2.7


【解决方案1】:

我认为你在get_age() 中有逻辑错误:

  def get_age(self):
    birthdate = self.birthdate
    today = date.today()
    if today.month >= birthdate.month and today.day >= birthdate.day:
      self.age = today.year - birthdate.year
    else:
      # haven't reached birthday yet
      self.age = (today.year - birthdate.year) - 1
    return self.age

【讨论】:

  • 我确实想相信它是get_age(self),我只是不确定在哪里更改。我用 ">=" 和 "and" 都试过了,它没有用。我得到了同样的结果
  • 在您的 else 条件下,我认为您的意思是拥有 subyear = 1birthdate.year + subyear -- 抱歉,我之前一定误读了。编辑:我更新了我的评论
  • 我将代码更新为“如果”。我会收到一条错误消息,指出 RuntimeErrorElement(RuntimeError,Error on line 22: return self.age AttributeError: 'Person' object has no attribute 'age'
  • 是的,那是因为您并不总是设置 self.age。您是否尝试过使用我当前评论中的代码?
  • @Mark 啊,这就是为什么我不喜欢他们只是从评分程序中调用你的代码的作业。将您的 get_age 代码更改为 return self.birthdate,这将是错误的,但它会显示您正在获取的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2015-01-13
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多