【问题标题】:How to get the largest and shortest name from a file?如何从文件中获取最大和最短的名称?
【发布时间】:2019-11-30 00:03:12
【问题描述】:

我正在尝试从文件中获取最长和最短的名称并将其打印出来。如果两个人的名字长度相同并且是最大/最小的,我也需要打印出来。

我尝试了什么:

try:
    marvel_number = 0
    with open("Marvel.txt") as numbers_file:
        for line in numbers_file:
            marvel_number = marvel_number + 1
            print(len(marvel_number))

当我运行这段代码时,它给了我这个错误:

TypeError: 'int' 类型的对象没有 len()

这是我试图从中读取的 Marvel.txt 文件

【问题讨论】:

  • 正如我从上面提到的代码中看到的,您正在尝试获取在顶部声明的 int 的长度(marvel_number = 0)。该错误清楚地表明您不能将 len() 用于 int 类型。你能详细说明你在这里尝试什么吗?我一定很乐意帮助您解决问题:)
  • 您的代码所做的(除了打印)是计算文件中的行数。你能提供一个文件内容的例子吗?它是一个名字列表吗?是数字列表吗?

标签: python python-3.x pycharm


【解决方案1】:

您可以遍历文件中的所有这些名称,将它们存储在名为names 的列表中,然后根据每个项目的长度对该列表进行排序。默认情况下,Python 的顺序是升序,所以最短的名字是第一个元素,最长的名字是最后一个元素:

with open('marvel.txt', 'r') as numbers_file:
    names = sorted([line.strip() for line in numbers_file], key=len)
    print('Shortest name: ' + names[0])
    print('Longest name: ' + names[-1])

这将打印:

Shortest name: Thanos
Longest name: Black Widow

【讨论】:

    【解决方案2】:

    以下代码将识别 numbers_file 中最长的行,并将其打印出来。

    try:
        longest_name = ''
        with open("Marvel.txt") as numbers_file:
            for line in numbers_file:
                if len(line) > len(longest_name):
                    longest_name = line
            print(longest_name)
    

    【讨论】:

    • 谢谢,这行得通,但是我能用最短的名字做什么?我厌倦了将 if 语句中的“>”更改为“
    • @Wawapython123 为你必须用一个很长的字符串初始化longest_name 的最短名称(例如'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')。它可以是任何东西,因为它将被更短的名称所取代。将> 更改为< 是正确的做法。但它找不到比空字符串短的字符串。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2022-11-29
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多