Мне нужен алгоритм, который может найти самое длинное слово в строке, я не могу использовать split()
, единственная предопределенная функция, которую я могу использовать, это find()
, и я не думаю, что это полезно для этого решения.
Это то, что мне удалось сделать до сих пор:
ch=input("donner: ")
def plus_long(ch):
p=ch.find(" ")
if p==-1:
return ch
maximum = ""
mot = ""
while p!=-1:
mot=ch[:p]
print(mot)
ch=ch[p+1:]
print(ch)
if len(mot)>len(maximum):
maximum=mot
p=ch.find(" ")
return maximum
print("maximum est: ",plus_long(ch))
Но этот не проверяет последнее слово, потому что больше нет пробелов.
Обновлено: Спасибо всем за ответы, сегодня утром я понял, как решить эту проблему, поместив ch в новую переменную и сравнив ее с максимальной, и это сработало.
ch=input("donner: ")
def plus_long(ch):
p=ch.find(" ")
if p==-1:
return ch
maximum = ""
mot = ""
while p!=-1:
mot=ch[:p]
print(mot)
ch=ch[p+1:len(ch)]
print(ch)
if len(mot)>len(maximum):
maximum=mot
p=ch.find(" ")
f=ch
if len(f)>len(maximum):
maximum=f
return maximum
print("maximum est: ",plus_long(ch))
Извините за французские переменные, и учитель сказал нам не использовать разделение 🤷🏻
Затем используйте ch.replace(' ', '\n').splitlines()
:-P
Отвечает ли это на ваш вопрос? Python: Найдите самое длинное слово в строке
Вы можете найти с помощью split
и len
:
# Longest word
# Reading sentence from user
sentence = input("Enter sentence: ")
# Finding longest word
longest = max(sentence.split(), key=len)
# Displaying longest word
print("Longest word is: ", longest)
print("And its length is: ", len(longest))
Результат:
Enter sentence: Tongue tied and twisted just an earth bound misfit I
Longest word is: twisted
And its length is: 7
ОП говорит i can't use split()
. По-моему, это домашнее задание.
ch=input("donner: ")
def plus_long(ch):
word = ''
maximum = ''
for letter in ch:
if letter == ' ':
if len(maximum) < len(word):
maximum = word
word = ''
else:
word += letter
return maximum
print("maximum est: ",plus_long(ch))
Это не возвращает слово максимальной длины и не решает проблему OP, заключающуюся в том, что последнее слово не возвращается, если оно самое длинное.
Вы можете установить p
на None
, если метод find
возвращает -1
, чтобы ch[:p]
разрезал остальную часть строки, чтобы получить последнее слово:
def plus_long(ch):
maximum = ""
while True:
p = ch.find(" ")
if p == -1:
p = None
mot = ch[:p]
if len(mot) > len(maximum):
maximum = mot
if p is None:
break
ch = ch[p + 1:]
return maximum
Использование find
def plus_long(ch):
longest = ""
i = 0
while i < len(ch):
n = ch.find(" ", i)
if n == -1:
n = len(ch)
if len(longest) < len(ch[i:n]):
longest = ch[i:n]
i = n+1
Тест:
print (plus_long("there is a cat on a very big banana tree"))
print (plus_long("there is a cat on a mountain"))
print (plus_long("there"))
Выход:
banana
mountain
there
Я разделил эту проблему на две части:
Используйте find
, чтобы создать список слов.
Найдите самое длинное слово в списке.
def plus_long(ch):
letters = "abcdefghijklmnopqrstuvwxyz"
words = ['']
for v in ch:
if letters.find(v.lower()) != -1: # Use find to check if the character is part of the alphabet
words[-1] += v # If so, add that character to the last string in the list
else:
words.append('') # Else, start a new string
result = "" # Check which string is the longest
for word in words:
if len(word) > len(result):
result = word
return result
Тест:
>>> plus_long("Hello!!!!!!!!!!! How are you? I am exhausted.")
Выход:
'exhausted'
Я вижу, что в других ответах не учитываются знаки препинания, поэтому, используя их функции, результатом будет 'Hello!!!!!!!!!!!'
.
это очень длинный и, вероятно, худший метод в отношении нотации большой буквы «О», но это простой подход для начинающих.
def longWord (sentence):
singleWord = ""
words = []
for letter in sentence:
if letter != " ":
singleWord += letter
else:
words += [singleWord]
singleWord = ""
words += [singleWord]
for i in range(len(words)-1):
biggestWord = ""
if len(words[i]) >= len(words[i+1]):
biggestWord += words[i]
else:
biggestWord += words[i+1]
print(words)
print(biggestWord)
longWord("This is a callback")
ВЫХОД -
['This', 'is', 'a', 'callback']
callback
Я знаю, что у вас уже есть несколько ответов. Вот код с O(1)
ch=input("donner: ")
prev_pos = 0
max_word = ''
for i, sp in enumerate(ch):
if sp == ' ':
if len(ch[prev_pos:i]) > len(max_word): max_word = ch[prev_pos:i]
prev_pos = i+1
if len(ch[prev_pos:]) > len(max_word): max_word = ch[prev_pos:]
print ('longest word :', max_word, 'length :', len(max_word))
Выход для этого:
donner: sentence
longest word : sentence length : 8
donner: this sentence
longest word : sentence length : 8
donner: this is a sentence
longest word : sentence length : 8
donner: this sentence is expectedly very lengthy
longest word : expectedly length : 10
donner: word is lengthy
longest word : lengthy length : 7
Я также хотел дать вам альтернативный подход. Я добавил комментарии, чтобы вы поняли код
ch=input("donner: ") #input the sentence
word = '' #capture each word in this variable
wd = [] #store all the words into this list
for sp in ch: #iterate thru the string
if sp != ' ': word += sp #concat to create the word
else:
wd.append(word) #add the word to list
word = '' #reset word
wd.append(word) #add the last word to the list
long_word = max(wd,key=len) #find the longest word
print ('longest word :',long_word, 'length :', len(long_word))
Вот ваш код с дополнением, которое проверяет последнее слово (len), когда p == -1
как раз перед выходом из цикла. Это дополнение сообщало правильную максимальную длину, если последнее слово больше максимального.
ch=input("donner: ")
def plus_long(ch):
p=ch.find(" ")
if p==-1:
return ch
maximum = ""
mot = ""
while p!=-1:
mot=ch[:p]
print(mot)
ch=ch[p+1:]
print(ch)
if len(mot)>len(maximum):
maximum=mot
p=ch.find(" ")
# 'ch' now has the last word in a sentence
# it needs to be checked against 'maximum'
if p == -1:
if len(ch) > len(maximum):
maximum = ch
return maximum
print("maximum est: ",plus_long(ch))
1. Не называйте переменные на французском языке. 2. Почему нельзя использовать сплит?