Получить слова самой длинной длины и удалить \n после каждой строки?

f = open('wordlist.txt','w')
for x in range(4):
    u = input('please enter how many words you like to write')
    f.write(u + '\n') 
print('it have been wrote into file')


e = 0
y = 0               #y for total length
f = open('wordlist.txt','r')

for x in f:
    print(len(x))
    y += len(x)
    e += 1
    if len(x) >= len(x):
         z = len(x)       #get largest length
    
avglength = y/e          #get average length for each line

print(z)            
print(y)
print(avglength)

как в приведенном выше коде, я хочу получить наибольшую длину в файле, но это дает мне только длину последнего слова, почему это происходит? и как удалить '\n' после каждой строки, которая мне нужна, чтобы найти каждую длину слова, но длина неверна. Например, предполагается, что «sss» имеет длину 3, и в моем коде я добавил «\ n» в каждой строке, это может привести к тому, что «sss» имеет длину 4. Помогает?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
122
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы пишете в своем коде:

if len(x) >= len(x):
     z = len(x)  

что всегда будет True. В результате ваш z примет значение длины вашего последнего x, которое будет вашим последним словом.

Вы можете отслеживать текущую максимальную длину, вне цикла for, определяя переменную max_length:

max_length = 0

и в цикле используйте:

max_length = max([len(x), max_length])
if len(x) >= max_length:
    z = len(x)
    max_length = z

Или, как вы указали в комментариях ниже, вы можете просто написать все это утверждение как:

z = max([len(x), z])

при условии, что вы установили z = 0 вне цикла for.

Вот немного измененный способ выполнения вычислений, которые вы хотите. Это может быть легче читать, и он использует диспетчер контекста with для обработки открытия и закрытия вашего файла:

# get words and write to file
with open('wordlist.txt','w') as f:
    for x in range(4):
        u = input('please enter a word: ')
        f.write(u + '\n')
    print('Your words have been written into the file')
    
# read words and count find length of longest word
with open('wordlist.txt') as f:
    words = f.readlines()
word_lengths = [len(i.strip()) for i in words]    # get the length of each word in list after removing white space
max_length = max(word_lengths)            # find the longest length
total_length = sum(word_lengths)          # find the total length of all words
average_word_length = total_length / len(words)   # find the average length

спасибо @роббо. так что насчет моего второго вопроса о длине строки? это не дало мне правильную длину, так как «один» должен иметь длину 3, но дал мне 4? как я могу это исправить? это потому что я добавил '\n' в конце этой строки?

MINO 21.12.2020 04:38

@MINO Смотрите мой ответ, он охватывает все. Спасибо

Samaksh Gupta 21.12.2020 05:09

@MINO извините, да, не обратился к этому, потому что это было покрыто другим ответом. Вы можете использовать strip(), чтобы избавиться от всех пробелов по обе стороны от слова. Что удалит символ новой строки. Поэтому, когда вы пишете for x in f:, сделайте следующую строку x = x.strip()

robbo 21.12.2020 05:13

@robbo в вашем втором коде, что он делает в line of max_length = max([len(x), max_length])? вы можете избавиться от него? я узнал, что вы все еще можете получить самую длинную длину без этой линии, просто max_length = 0 if len(x) >= max_length: z = len(x) max_length = z

MINO 21.12.2020 05:40

@MINO Функция max() возвращает максимальное значение списка (отсюда и квадратные скобки). Да, вы правы, вы можете избавиться от этой строки. Но, с другой стороны, вы также можете сохранить строку и избавиться от оператора if, если вы используете max_length в качестве конечной переменной, а не z. Я думаю, что последний даже немного более элегантен. Я обновил приведенный выше код, избавившись от max_length и вместо этого назвав его z. Спасибо за указание на это.

robbo 21.12.2020 11:58

Другое возможное решение:

# Use open() as a context manager so you don't have to worry about closing the file.
with open('wordlist.txt','r') as opened:
    # Create a list of words in the file.
    # words = list(opened)

    # EDIT: The traditional way to split some lines and strip
    # the newline character.
    words = opened.read().strip().split("\n")

    # Start max_length at negative 1.
    max_length = -1

    # List object to hold all word lengths.
    all_lengths = []

    # Number of words written to file
    num_of_words = len(words)

    # Iterate the list of words.
    for word in words:
        # Get length of the current word.
        current_length = len(word)

        # Append the length of the current word to the list.
        all_lengths.append(current_length)

        # Using all_lengths[-1] gets the latest item on the list
        # Also, we only care if the current value is larger than the max value.
        if all_lengths[-1] > max_length:
            max_length = all_lengths[-1]

# Average length of word per line.
average_length = sum(all_lengths) / num_of_words

спасибо @Mark Moretto, а как насчет моего второго вопроса о длине строки? это не дало мне правильную длину, так как «один» должен иметь длину 3, но дал мне 4? как я могу это исправить? это потому что я добавил '\n' в конце этой строки?

MINO 21.12.2020 05:02

Вы можете использовать метод .split(), чтобы удалить \n из вашей строки.

Вот что вам нужно сделать:

x = x.split('\n')
    x = x[0]

Вы можете добавить это в цикл for x in f:.

Вот полный код:

f = open('wordlist.txt', 'w')
for x in range(4):
    u = input('Please enter the word: ')
    f.write(u + '\n')
print('it has been written into file')

z = 0
e = 0
y = 0  # y for total length
f = open('wordlist.txt', 'r')

for x in f:
    x = x.split('\n')    #Now, x = ['Your Input', '']
    x = x[0]             #Select first string
    print(len(x))
    y += len(x)
    e += 1
    if len(x) >= z:
        z = len(x)  # get largest length

avglength = y / e  # get average length for each line

print(z)
print(y)
print(avglength)

Вот пробег:

Please enter the word: This
Please enter the word: is
Please enter the word: just
Please enter the word: testing

Соответствующий вывод:

4
2
4
7
7
17
4.25

Другие вопросы по теме