当前位置: 首页 > 面试题库 >

Python:第二个for循环未运行

贝滨海
2023-03-14
问题内容
scores = []
surfers = []
results_f = open("results.txt")

for each_line in results_f:
    (name,score) = each_line.split()
    scores.append(float(score))

for line in results_f:                      
    (name,score) = line.split()
    surfers.append(name)

results_f.close()
scores.sort(reverse = True)  
print("The high scores are : ")
print("1 - "+str(scores[0]))
print("2 - "+str(scores[1]))
print("3 - "+str(scores[2]))

print(surfers[0])

只是一个实验程序。但是第二个for循环似乎没有运行。如果我切换for循环的位置;同样,第二个位置的循环不会运行。为什么会这样呢?


问题答案:

文件不是列表。您不能在不倒退文件对象的情况下循环播放它们,因为完成阅读后文件位置不会重置为开始。

您可以results_f.seek(0)在循环之间添加

for each_line in results_f:
    (name,score) = each_line.split()
    scores.append(float(score))

results_f.seek(0)

for line in results_f:                      
    (name,score) = line.split()
    surfers.append(name)

但你会 由不循环两次更好。您已经name在第一个循环中获得了信息。只需循环 一次

for each_line in results_f:
    (name,score) = each_line.split()
    scores.append(float(score))
    surfers.append(name)

您的代码仅对scores列表进行排序;该surfers列表将不符合要求。如果您需要将姓名和分数排序在一起,请将姓名和分数放在列表中;如果您将分数放在第一位,您甚至不需要讲sort任何特别的事情:

surfer_scores = []

for each_line in results_f:
    name, score = each_line.split()
    surfer_scores.append((float(score), name))

surfer_scores.sort(reverse=True)  
print("The high scores are : ")
for i, (score, name) in enumerate(surfer_scores[:3], 1):
    print("{} - {}: {}".format(i, name, score)


 类似资料:
  • 主要内容:Python for循环的具体应用Python 中的循环语句有 2 种,分别是 while 循环和 for 循环,前面章节已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。 for 循环的语法格式如下: for 迭代变量 in 字符串|列表|元组|字典|集合:     代码块 格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以

  • 我有一个python for循环,它执行一个bash脚本,如下所示(我将其简化为只包含需要显示的内容),我需要它在for循环中同时运行所有这些bash脚本,但要等到它们全部完成后才能继续串联。bash脚本是我唯一希望并行运行的部分。它是在同一for循环的下游做一些需要串联完成的事情。这可能吗? 以下是系列作品。没有脚本的并行执行,因为。如果我删除. etc(),它几乎立即出错,下游的任何东西都不再

  • raceback(最近的最后一次调用):File"/User/kaikeichan/Desktop/python_webpage/actionchain.py",第7行,在驱动程序=网络驱动程序中。Chrome(PATH)File"/Library/Framework/Python.framework/Versions/3.10/lib/python3.10/site-packages/selen

  • 我是java新手,受这次讨论的启发,我在这里写了一个while循环版本和一个for循环版本(这个问题),这个程序在数组中搜索一个“项”(在main方法中称为int 20)并返回其值,这两个版本都有效。 然而,在这个for循环版本中,第二个if语句,尤其是“database[i]==database[database.length-1]”,看起来是多余的,因为for循环中的终止条件已经指定 我尝试用

  • 问题内容: 我正在尝试读取日志文件,并将某些值与预设阈值进行比较。我的代码设法通过函数中的第一个循环记录原始数据。 我添加了打印语句以尝试弄清楚发生了什么,并且我已经推断出我的第二个for循环永远不会“发生”。 这是我的代码: 这就是我调用此函数的方式: 看起来像这样: 我尝试谷歌搜索类似的问题,但没有发现。我尝试将我的第一个for循环移入,但是发生相同的问题。目前没有语法错误,我现在无法看到该问

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两