найти самое длинное слово и наибольшее число в текстовом файле - PullRequest
2 голосов
/ 14 января 2020

Итак, я учусь python прямо сейчас, и мне действительно нужна ваша помощь. Например, у вас есть случайный текстовый файл со словами и цифрами внутри. Вам нужно найти самое длинное слово и максимальное количество в этом файле. Мне удалось сделать первую половину, я нашел самое длинное слово:

def longest_word(word):
    with open(word, 'r') as infile:
        words = infile.read().split()
    max_len = len(max(words, key=len))
    return [word for word in words if len(word) == max_len]
print (("the longest word is :"), longest_word ('text.txt'))

Можете ли вы помочь мне со второй частью? как найти максимальное число в файле?

Ответы [ 4 ]

1 голос
/ 14 января 2020

Вы можете реализовать обработку ошибок и попытаться разобрать строку как int: "2" -> 2

def longest_integer(word):
    max_int = 0
    with open(word, 'r') as infile:
        words = infile.read().split()
    for word in words:
        try:
            int_val = int(word)
            if int_val > max_int:
                max_int = int_val
        except:
            pass
    return max_int
print (("the longest integer is :"), longest_integer ('text.txt'))
1 голос
/ 14 января 2020

Ты почти у цели! Вы можете проверить каждое слово, чтобы увидеть, является ли оно целым числом, а затем проверить, больше ли это значение, чем предыдущий максимум. Предполагается, что целью является найти наибольшее целое число

for word in words:
    try:
        if int(word) > MAX_INT:
            MAX_INT = word
    except:
        pass
0 голосов
/ 14 января 2020
with open(word, 'r') as infile:
    data = infile.read()
    nums = [int(num) for num in re.findall('\d+', data)
    max_num = max(nums)
0 голосов
/ 14 января 2020

Поскольку числа являются целыми числами, вы можете получить их, используя метод str isdigit, рассмотрите следующий пример:

words = ['abc', '123', 'xyz', '1', '999']
numbers = [i for i in words if i.isdigit()]
print(numbers)  # ['123', '1', '999']

, тогда вы можете указать max с int как key следующим образом:

print(max(numbers, key=int))  # 999

не забудьте НЕ сравнить strs представляющих числа, поскольку это может дать неожиданные результаты, например:

print(max(['9000','999']))  # 999

обратите внимание, что ValueError произойдет, если исходный список (words) не содержат никаких чисел.

Редактировать: я забыл заметить, что выше работает исключительно для неотрицательных целых чисел, чтобы разрешить также отрицательные целые, вы можете написать функцию для проверки этого следующим образом:

def represent_int(x):
    if not x:  # empty str
        return False
    if x[0] == '-':  # leading - that is negative integer
        return x[1:].isdigit()
    return x.isdigit()

и используйте его следующим образом:

numbers = [i for i in words if represent_int(i)]

обратите внимание, что я предполагаю, что represent_int будет передаваться исключительно с str с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...