Python对象数学
我有文件地址和内容Python对象数学,python,getter-setter,Python,Getter Setter,我有文件地址和内容 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
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()更改为:
这意味着我必须将年份值设置为整数。但我不知道该把它放在哪里。我试过这个
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'
将输入作为
str
。将其强制转换为int
,然后重试。类似地,将所有str
强制转换为int
,只要您需要。如果不起作用,请回复。另外,请发布我们可以运行以测试的代码。错误是不言自明的。您正在对字符串和int执行-
运算符
在您的代码中,age=Subscriber().inp self.year
在使用user.setYear(int(记录[“出生年份]))
后,第二个操作数是int,但您忘记了第一个操作数,即Subscriber().inp
一个快速的解决方案是将输入作为inp=int(输入(“请在当前年份输入”)
或使用age=int(Subscriber().inp)-int(self.year)
p.S.我尝试了
age=int(Subscriber().inp)-int(self.year)
处理代码的方法,效果很好。我建议您使用pandas.read\u csv从文件创建数据帧,然后执行其余操作。这样做的行数将非常少。我曾尝试在Subscriber类中强制转换为int,但没有成功。这就是我尝试在main中使用users.setYear进行cast的原因。也许我不明白
TypeError: unsupported operand type(s) for -: 'int' and 'str'
input("Please enter in the current year: ")