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. Помогает?
Вы пишете в своем коде:
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
@MINO Смотрите мой ответ, он охватывает все. Спасибо
@MINO извините, да, не обратился к этому, потому что это было покрыто другим ответом. Вы можете использовать strip()
, чтобы избавиться от всех пробелов по обе стороны от слова. Что удалит символ новой строки. Поэтому, когда вы пишете for x in f:
, сделайте следующую строку x = x.strip()
@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 Функция max()
возвращает максимальное значение списка (отсюда и квадратные скобки). Да, вы правы, вы можете избавиться от этой строки. Но, с другой стороны, вы также можете сохранить строку и избавиться от оператора if
, если вы используете max_length
в качестве конечной переменной, а не z
. Я думаю, что последний даже немного более элегантен. Я обновил приведенный выше код, избавившись от max_length
и вместо этого назвав его z
. Спасибо за указание на это.
Другое возможное решение:
# 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' в конце этой строки?
Вы можете использовать метод .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
спасибо @роббо. так что насчет моего второго вопроса о длине строки? это не дало мне правильную длину, так как «один» должен иметь длину 3, но дал мне 4? как я могу это исправить? это потому что я добавил '\n' в конце этой строки?