首页 > 解决方案 > Python 对象数学

问题描述

我有包含内容的文件地址

Name,Phone,Email,Year_of_Birth
Elizi Moe,5208534566,emoe@ncsu.edu,1978
Ma Ta,4345667345,mta@yahoo.com,1988
Diana Cheng,5203456789,dcheng@asu.edu,1970

我正在寻找提取数据并显示它,使其看起来像

Please enter in the current year: 2018
Name           Phone          Email          Age
Elizi Moe      5208534566     emoe@ncsu.edu  40
Ma Ta          4345667345     mta@yahoo.com  40
Diana Cheng    5203456789     dcheng@asu.edu 40

但是每个年龄都应该根据他们的出生年份来正确计算。我在 1978 年硬编码为测试用例,但我无法让我的年龄动态计算。

这是我的代码,MyClasses.py:

class Subscriber:
        inp = input("Please enter in the current year: ")
        def __init__(self, name="name", phone=5206675857, email="your@email.com", year=0):
                self.name= name
                self.phone= phone
                self.email= email
                self.year= year
        def getName(self):
                return self.name

        def getPhone(self):
                return self.phone

        def getEmail(self):
                return self.email

        def getAge(self):
                age = Subscriber().inp-1978
                return age

        def setYear(self, year):
                self.year = year

执行

from MyClasses import Subscriber
import csv, sys

def main():

        filename = sys.argv[1:]

        filein = open("addr.csv", 'r')
        data = csv.DictReader(filein)
        user = Subscriber()

        recordList = []
        for record in data:
                recordList.append(Subscriber(record["Name"],record["Phone"],record["Email"],record["Year_of_Birth"]))

        print("%-15s%-15s%-15s%-15s" %("Name","Phone","Email","Age"))

        for i in range(len(recordList)):
                print("%-15s%-15s%-15s%-15s" %(recordList[i].getName(),recordList[i].getPhone(),recordList[i].getEmail(),recordList[i].getAge()))


main()

我试图将行 getAge() 更改为:

def getAge(self):
                age = Subscriber().inp-self.year
                return age

这意味着我必须将年份值设置为整数。但我不知道把它放在哪里。我试过这个。

recordList.append(Subscriber(record["Name"],record["Phone"],record["Email"],record["Year_of_Birth"]))
    user.setYear(int(record["Year_of_Birth"]))

但我不断收到错误

TypeError: unsupported operand type(s) for -: 'int' and 'str'

标签: pythongetter-setter

解决方案


该错误是不言自明的。您正在-对字符串和 int 执行运算符。

在您的代码中,age = Subscriber().inp-self.year使用user.setYear(int(record["Year_of_Birth"]))第二个操作数是 int 但您忘记了第一个操作数,即Subscriber().inp.

一个快速的解决方案是将输入作为inp = int(input("Please enter in the current year: "))或使用age = int(Subscriber().inp)-int(self.year)

PS我尝试age = int(Subscriber().inp)-int(self.year)了使用您的代码的方法,并且运行良好。


推荐阅读