首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python重复函数3次

python重复函数3次
EN

Stack Overflow用户
提问于 2020-09-09 17:04:08
回答 3查看 172关注 0票数 0

本守则的目的是:

  1. 要求用户输入他的名字。
  2. 要求用户输入他的出生日期
  3. 代码将这个名字分为第一名、第一名和第二名
  4. ,代码将计算出年龄,以年、月、日为单位。

< code >H19该代码将将所有这些数据存储在字典< code >H 210G 211

以下是代码:

代码语言:javascript
复制
from datetime import datetime
from dateutil.relativedelta import relativedelta


    class Test:
        def __init__(self):
            self.today = datetime.today()
    
        def name(self):
            first_name, middle_name, last_name = input("enter your name:\n".title()).split(' ')
            return first_name, middle_name, last_name
    
        def age(self):
            date_of_birth = input("enter your date of birth:\n")
            date_of_birth = datetime.strptime(date_of_birth, "%d/%m/%Y")
            age = relativedelta(self.today, date_of_birth)
            return age
    
        def data(self):
            data = {"first name": self.name()[0],
                    "middle_name": self.name()[1],
                    "last name": self.name()[2],
                    "age years": self.age().years,
                    "age months": self.age().months,
                    "age days": self.age().days}
            print(data)
    
    
    Test().data()

代码不会出错。

但是关于姓名和年龄的问题对每个人都重复了三次。像这样的东西

输入你的出生日期:

1986年9月26日

输入你的出生日期:

1986年9月26日

输入你的出生日期:

1986年9月26日

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-09 17:07:41

你给age()打了三次电话。您可以调用它一次,然后访问它的成员:

代码语言:javascript
复制
def data(self):
    name = self.name()
    age = self.age()
    data = {"first name": name[0],
            "middle_name": name[1],
            "last name": name[2],
            "age years": age.years,
            "age months": age.months,
            "age days": age.days}
    print(data)
票数 3
EN

Stack Overflow用户

发布于 2020-09-09 17:14:44

我建议您使用实例并调用init方法本身中的名称输入,如下所示:

代码语言:javascript
复制
class Test:
    def __init__(self):
        self.today = datetime.today()
        self.full_name = input("enter your full name:\n".title()).split(' ')
        self.dob = input("enter your date of birth:\n")

    @property
    def name(self):
        first_name, middle_name, last_name = self.full_name
        return first_name, middle_name, last_name

    @property
    def age(self):
        date_of_birth = self.dob
        date_of_birth = datetime.strptime(date_of_birth, "%d/%m/%Y")
        age = relativedelta(self.today, date_of_birth)
        return age

    def data(self):
        data = {"first name": self.name[0],
                "middle_name": self.name[1],
                "last name": self.name[2],
                "age years": self.age.years,
                "age months": self.age.months,
                "age days": self.age.days}
        print(data)

因此,当您实例化类对象并在任何需要使用的时候使用数据方法时,您实际上将在__init__方法中将所需的值初始化为输入,它将将值存储到变量,直到您恢复它为止。

票数 1
EN

Stack Overflow用户

发布于 2020-09-09 17:11:45

您将分别调用self.ageself.name三次。您应该只调用它们一次,并将结果保存到相关变量中。

也许将这些变量设置为实例的属性以供以后使用会更好,但作为对问题的最低修正,下面是一个只执行相关调用一次的data版本。

代码语言:javascript
复制
    def data(self):

        first_name, middle_name, last_name = self.name()
        
        age = self.age()
        
        data = {"first name": first_name,
                "middle_name": middle_name,
                "last name": last_name,
                "age years": age.years,
                "age months": age.months,
                "age days": age.days}
        print(data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63816291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档