python - 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'
解决方案
该错误是不言自明的。您正在-
对字符串和 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)
了使用您的代码的方法,并且运行良好。
推荐阅读
- python - 如何为 NLP 安装 BigBirdTokenizer?
- python - 有没有办法在 PyCharm 中读取和更改一个巨大的 csv 文件的内容?
- mysql - 如何使用 Windows 10 在 MariaDB 中进行复制?服务出现错误 1067
- android - 安卓刀柄。如何重建依赖关系树?
- html - 具有可重复行级元素的 HTML CSS 可打印 2 列表
- python - 为什么我通过终端在 Mac OS 上安装的软件包返回 ModuleNotFoundError:尝试通过 IDLE 导入它们时
- flutter - 如何编写一个条件之一为空的 Flutter 三元运算符(什么都不做)
- mongodb - 将字符串数组传递给 MongoDb Schema
- excel - 在一台计算机上而不是在另一台计算机上获取“请重建此数据组合”
- sql-server - SQL Server 索引对不同值的查找表