【问题标题】:How to get line number如何获取行号
【发布时间】:2021-10-22 03:16:38
【问题描述】:

所以我制作了一个随机名称生成器,但我希望它甚至打印名称的行号,那么我如何获得行号? 代码:

import random

names = open(r"names.txt", "r")
name1 = readlines(names)
name = random.choice(name1)
names.close()

print(name)

所以你们有什么想法吗?

【问题讨论】:

  • 您可以只生成一个随机有效索引name1,而不是使用random.choice。然后使用它从name1 获取名称并显示行号,即索引加一。有意义吗?
  • 什么是readlines(names)?请提供minimal reproducible example

标签: python random numbers generator line-numbers


【解决方案1】:

你可以这样写一个函数:

import random

def get_name():
    with open('names.txt', 'r') as f:
        names   = f.readlines()
        i       = random.randint(0, len(names))
        return i, names[i].strip()

print(get_name())

该函数返回两个值,其中i 是索引,第二个是名称 - 您可以使用这两个值以多种不同方式呈现最终输出。

【讨论】:

  • 请记住,return i, names[i].strip() 将返回一个您需要稍后解包的元组
  • 如果 OP 想要字符串表示的行号而不是元组,我愿意改变它。
  • 不,我告诉你解包元组:i,j =get_name()。就是这样
  • OP应该可以按原样使用函数了。
  • @Sujay 确实可以打印一个元组,而无需先解包。
【解决方案2】:

enumerate() 是一种将计数器添加到可迭代对象并将其作为新对象返回的方法。那么你应该将它转换回list 对象。

import random

names = open(r"names.txt", "r")
name1 = readlines(names)
name = random.choice(list(enumerate(name1)))
names.close()

print(name)

如果你想要一个行号,你可以通过enumerate(name1, 1) 来从 1 而不是 0 开始计数。

【讨论】:

  • 它不添加索引,它以元组的形式返回一个带有元素的计数器
  • 另外,如果你将它包含在一个单独的函数中并返回值会更好。然后你可以在任何地方访问该功能
  • 同意,但我不确定 OP 是如何实现它的,我正在使用他共享的代码。我认为您应该在问题 cmets 部分对此发表评论。我只提到了添加行号的原始问题:)
猜你喜欢
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2015-10-04
相关资源
最近更新 更多