将一行上的输入分配给它的行号?

2024-06-11 10:53:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在AIO(澳大利亚信息学奥林匹克)培训问题网站上尝试了以下问题(问题用斜体表示,细节用粗体表示,我的尝试如下):

问题

百科全书

输入文件:encyin.txt

输出文件:encyout.txt

时限:1秒

又一次是我的第一个百科全书鉴赏协会的问答之夜。一周又一周,你都来参加这些小测验,熟练地回答了一个又一个关于动物园动物和一周中的几天的问题,结果其他人在最后回答了所有晦涩难懂的奖金问题,抢占了第一名,留给你的只是一次“不错的尝试!”贴纸

沮丧和沮丧,你坐在家里沉思过去的失败,这时你想到了一个想法。可能是。。。?翻阅几个月愤怒地涂鸦的笔记,你证实了你的怀疑——奖金问题遵循一个超级简单的模式!你的心脏跳了一下。在每一个你参加过的每一个测验中,每一个问题都是以“我的第一本百科全书的第X页上有多少个单词”来表达的?“通常你会认为这有点不太可能,甚至是做作的,但现在不是——今天你有一个Mars酒吧要赢。”eem>

您需要极其小心地编译页码列表及其相应的字数。在你的位置上的其他人可能会试图记住这个列表,但不是,你的计划更高科技:首先,你将编写一个程序,可以为你回答这些问题;然后,你将把你信任的笔记本电脑偷偷带到测验中,然后开始闪电战比赛

剩下的就是让您实际编写程序。这项任务似乎很简单:它必须把你的数字清单和今晚的奖金问题,然后——悄悄地——为你打印出正确的答案

输入

输入的第一行的形式为nq,其中n是百科全书中的页数,q是要回答的问题数。(1<;=n,q<;=10000)

接下来是n行,每行描述一个页面。第i行将包含单个整数pi,即第i页上的字数。(0<;=pi<;=2000000000)

下面是q行,每行描述一个问题。这些行中的每一行都将包含一个整数x,表示“第x页上有多少个单词?”(1<;=x<;=n)

输出

对于每个问题,您的程序应该编写一行输出。此行应包含一个整数,即请求页面上的字数

我的尝试

我能够很容易地编写代码的开头:

file = open("encyin.txt", "r")
pages, questions = file.readline().split()
pages = int(pages)
questions = int(questions)
for i in range (0, int(pages)):
    words = int(file.readline())

但我不知道下一步该怎么办。如何将给定的每个数字分配给一行?例如,第i行有一个整数,用于描述第i页上的字数,那么如何将该值分配给第i页

谢谢-我正在用python写作


Tags: 文件lt程序txt列表数字整数pages
2条回答

你能试试这个吗

with open("encyin.txt") as f:
    parts = next(f).split()
    pages = int(parts[0])
    questions = int(parts[1])
    counts = []
    # capture counts
    for _ in range(pages):
        num_pages = int(next(f))
        counts.append(num_pages)
    # answer questions
    for _ in range(questions):
        book = int(next(f))
        print(counts[book - 1])

我注意到的第一件事是,您正在迭代i in range(0, int(pages)),但是,页面仅从第1行开始(第0行由n&q组成)

因此,for循环应该更像这样(您还希望执行+1,因为您希望计算最后一页,否则python只会“正常运行,但不包括”):

for i in range (1, pages + 1):
    words = int(file.readline().strip())

在这里,我们放置.strip()函数,以便在将其转换为int时不会出现错误。默认情况下,文本文件在每行末尾都有\n(输入字符),python不理解int("5\n")的含义。函数的作用是:去除回车字符和任何尾随的“空白”

现在,您希望将每行的字数存储在某个位置,为此,您可以使用字典(https://www.w3schools.com/python/python_dictionaries.asp)或列表

列表索引从0开始,但每页单词数的行从1开始,即使你可以不使用列表,字典也会更直观

words_per_page = {}

您可以查看我提供的链接,了解这些功能是如何工作的。然后,我们可以将这些单词添加到词典中:

for i in range (1, int(pages) + 1):
    number_of_words = int(file.readline().strip())
    words_per_page[i] = number_of_words

然后,你可以用这些问题重复每一行。在这里,我们从每页字数结束的行后面的行开始for循环:

all_questions = []
for question_index in range(pages + 2, 1 + pages + questions):
    all_questions.append(file.readline().strip())

由此,您将得到一个页码字典作为关键字,每页单词作为值,以及一个包含所有问题的列表。然后您可以迭代这些内容,并获得页面中的字数:

for page_number in all_questions:
    no_of_words = words_per_page[int(page_number)]
    # You can then store this variable somewhere or write to a text file

现在,我还没有测试过任何代码,但是所有代码背后的想法都是一样的。如果您确实收到任何错误,请务必留下评论

相关问题 更多 >