作为当前项目的一部分,我试图将文本文件的内容加载到类对象列表中,然后输出对象。粗略地看,我的导师说我的代码看起来不错,但没有输出。我按下输入,然后......没有。它甚至不打印“已加载”代码。它只是提示输入一个新的输入,好像我按下了没有指令的输入。我不知道对象是否被正确加载到列表中,我认为它们不是。我只使用Windows控制台来运行它,因此调试速度有限且速度很慢。
我是Python新手,但这不是python课程,而是算法。但是我们的项目必须用Python编写,所以我正在学习。我通常用C,C ++或Java编写代码。我学到了什么,我从这里学到了一些有用的教程,我的导师给了我。我在这里搜索过,但是我看到的很多代码看起来都像我所拥有的。所以,我问你们非常聪明的人......
我在这里缺少什么?我是否错误地将文件加载到内存中?打印线是否不正确?我还有什么别的吗?
任何帮助都将非常感激。
更新:它正在运行,感谢下面的好人,但现在我收到以下错误:
Traceback(最近一次调用最后一次):文件 “D:\ CPSC335 \ Project_2 \ project2.py”,第28行,in main()文件“D:\ CPSC335 \ Project_2 \ project2.py”,第24行,在main中 packages.append(DebianPackage(* line.split()))TypeError: init ()缺少2个必需的位置参数:'votes'和'size'
因此,看起来我正在加载从文本文件中错误地提取数据。线路分裂是一个问题吗?
CMD输入:
C:\Python34>python D:\CPSC335\Project_2\project2.py D:\CPSC335\Project_2\packages.txt 5
filename:packages.txt
debianutils 128329 90
libgcc1 128327 46
dpkg 128294 2672
perl-base 127369 1969
debconf 121503 168
grep 121426 595
gzip 121346 142
login 121332 980
coreutils 121240 6505
bash 121229 1673
代码:project2.py
import sys
class DebianPackage:
def __init__(self, name, votes, size):
self.name = name
self.votes = votes
self.size = size
代码:project2.py(根据以下很多帮助更新)
def main():
if len(sys.argv) != 3:
print('error: you must supply exactly three arguments\n\n'+
'usage: python3 <Python source code file> <text file> <n> <W>')
sys.exit(1)
filename = sys.argv[1]
n = int(sys.argv[2])
lines = open(filename).readlines()
print('Loaded "' + filename)
packages = []
for line in lines:
packages.append(DebianPackage(*line.split()))
for package in packages:
print(package.name + ' ' + package.votes + ' ' + package.size)
if __name__ == "__main__":
main()
答案 0 :(得分:0)
您在模块中定义了一个名为main()的类和函数,但未调用它。所以在定义之后调用它。把它放在最后:
main()
您的代码中还有其他问题。您的构造函数名称必须是:
def __init__(...)
最好使用readlines()代替read():
lines = open(filename).readlines()
并在for循环中使用行。所以你的代码将是这样的:
import sys
class DebianPackage:
def __init__(self, name, votes, size):
self.name = name
self.votes = votes
self.size = size
def main():
if len(sys.argv) != 3:
print('error: you must supply exactly two arguments\n\n'+
'usage: python3 <Python source code file> <text file> <n> <W>')
sys.exit(1)
filename = sys.argv[1]
n = int(sys.argv[2])
lines = open(filename).readlines()
print('Loaded "' + filename)
packages = []
for line in lines:
packages.append(DebianPackage(*line.split()))
for package in packages:
print(package.name + ' ' + package.votes + ' ' + package.size)
main()
答案 1 :(得分:0)
如果您希望脚本运行,当您通过python myapp.py
执行脚本时,请通过以下方式放置或调用主逻辑:
if __name__ == "__main__":
main()
<强> UPD:强>
您的课程不正确,您应该使用__init__
,而不是_init_
:
class DebianPackage:
def __init__(self, name, votes, size):
self.name = name
self.votes = votes
self.size = size