【问题标题】:Python help. Finding largest value in a file and printing out value w namePython 帮助。在文件中查找最大值并打印出值 w 名称
【发布时间】:2018-10-05 22:46:13
【问题描述】:

我需要创建一个程序来打开一个文件,然后读取文件中的值,然后打印出具有最大值的名称。

该文件包含以下信息:

Juan,27
Joe,16 
Mike,29
Roy,10

现在我的代码如下:

  UserFile=input('enter file name')
  FileOpen=open(User File,'r')
  for lines in User File:
    data=line.split(",")
    name=data[0]
    hrs=data[1]
    hrs=int(hrs)
    LHRS = 0
    if hrs > LHRS:
    LHRS = hrs
    if LHRS == LHRS:
        print('Person with largest hours is',name)

打印出以下内容:

时间最长的人是胡安

时间最长的人是迈克

我怎样才能让它只打印出真正最大的?

【问题讨论】:

  • 您已经取得了一些不错的进展,但是您需要考虑几个问题。 1.修正你在这个问题中的缩进。 2. 您正在为文件中的每一行重置LHRS = 0,这会弄乱您的算法。 3.LHRS == LHRS 永远是真的。 4. 你需要在某个地方记录下工作时间最多的人的名字。 5. 你只想在程序结束时打印一个人,但是你把那个代码放在一个循环中,这意味着它可能会在结束之前发生很多次。

标签: python text-files return-value filereader


【解决方案1】:

虽然您为第一个计时器所做的努力令人印象深刻,但在这里您无法做到的是.. 跟踪名称,同时跟踪最大值!我确信可以按照你的方式完成,但我可以建议一个替代方案吗?

import operator

让我们像以前那样读入文件。这是一种很好的做法,此方法处理文件关闭,如果操作不当,可能会导致许多问题。

with open('/Users/abhishekbabuji/Desktop/example.txt', 'r') as fh:
    lines = fh.readlines()

现在我的每一行都在一个名为lines 的列表中,它也有这个烦人的\n。让我们用空格替换它''

lines = [line.replace("\n", "") for line in lines]

现在我们有一个这样的列表。 ['Name1, Value1', 'Name2, Value2'..] 我现在打算做的是,对于列表中的每个字符串项,将第一部分作为键,将第二部分的整数部分作为我的字典 example_dict 的值。所以在'Name1, Value1' 中,Name1 是索引0 中的项目,Name2 是我在索引1 中的项目,当我把它变成一个列表时,就像我在下面所做的那样,并将键、值对添加到词典。

example_dict = {}
for text in lines:
    example_dict[text.split(",")[0]] = int(text.split(",")[1])
print(example_dict)

给予:

{'Juan': 27, 'Joe': 16, 'Mike': 29, 'Roy': 10}

现在,获取值为max的key并打印出来。

largest_hour = max(example_dict.items(), key=operator.itemgetter(1))[1]

highest_key = []
for person, hours in example_dict.items():
    if hours == largest_hour:
        highest_key.append((person, hours))

for pair in highest_key:

    print('Person with largest hours is:', pair[0])    

【讨论】:

  • 这种方法对于学习编码和算法基础知识的人来说太高级了。
  • @AlexHall 这家伙正试图在单个 for 循环中找到 max 值,因为他逐行读取......这对我来说是高水平的!它甚至让我停下来思考它是如何工作的
  • @Abhishek 问题我将如何编辑代码以便打印出多个名称,如果它们的最大小时数相同
  • @NathanMndz 检查我对旧答案的新编辑。我刚刚更新了它。如果您对此感到满意,请点赞并将其选为“已接受”(打勾)
  • @NathanMndz 你也可以投赞成票。如果你喜欢
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
相关资源
最近更新 更多