我很困惑我应该拿一个用户输入的文件,然后将文本文档中的分数转换成一个列表。
我遇到的问题是,当我把它变成一个列表时,它给了我一个变量下的三个单独的列表。def main():
file = input("Enter a filename: ")
file1 = open(file, "r")
Scores = (file1.readlines())
for line in Scores:
scores = [eval(i) for i in line.split()]
print(scores)
我将此作为输出:
[34, 34, 54, 14, 32, 24, 31, 34, 53, 74, 22, 29]
[54, 34, 14, 14, 32, 24, 31, 34, 53, 74, 22, 29]
[66, 53, 19, 45, 39, 72, 51, 46, 64, 33, 44, 55]
我可以请求帮助把它变成一个完整的列表,这样我就可以显示有多少分数,所有分数和平均分数。
答案 0 :(得分:2)
这将做你想要的:
def main():
file = input("Enter a filename: ")
file1 = open(file, "r")
Scores = (file1.readlines())
scores_list = []
for line in Scores:
scores_list.extend([eval(i) for i in line.split()])
print(scores_list)
诀窍是extend
现有列表,其中包含文件中每行的新列表。
请注意,此处还有其他改进机会......例如您可以使用上下文管理器来管理正确关闭文件:
def main():
filename = input("Enter a filename: ")
scores_list = []
with open(filename, "r") as file1:
for line in file1:
scores_list.extend([eval(i) for i in line.split()])
print(scores_list)
最后(也可能是最重要的),您可以将eval
替换为int
或float
(取决于输入)并使您的程序更加安全。实际上,eval
将在您的计算机上运行任何不受信任的代码。要演示,请在文本文件中添加一行exit()
,并注意您的程序在任何之前退出。攻击者可以使用它来执行恶意操作(例如,如果脚本以足够高的权限运行,则擦除您的主目录甚至整个驱动器。)
答案 1 :(得分:2)
您可以将列表理解用作单向
file = input("Enter a filename: ")
with open(file, "r") as f:
lines = f.readlines()
scores = [int(i) for line in lines for i in line.split()]
print(scores)