#python #function #if-statement
#python #функция #if-statement
Вопрос:
Мне нужно найти первую гласную в строке. Мой код проходит несколько случаев, но когда он проверяется на «запрошенный», он терпит неудачу, потому что возвращает позицию 3 вместо 0, поскольку a является первой гласной. Также в строке, не содержащей гласных, она должна возвращать длину строки.
Другая вещь, которую я пробовал, была: если ‘a’ в s, то дайте мне позицию a, но это не удалось для слова ‘eat’. Я не уверен, как поступить. Я вставил свой код ниже:
import introcs
def first_vowel(s):
"""
Returns the position of the first vowel in s; it returns len(s) if there are no vowels.
We define the vowels to be the letters 'a','e','i','o', and 'u'. The letter
'y' counts as a vowel only if it is not the first letter in the string.
Examples:
first_vowel('hat') returns 1
first_vowel('grrm') returns 4
first_vowel('sky') returns 2
first_vowel('year') returns 1
Parameter s: the string to search
Precondition: s is a nonempty string with only lowercase letters
"""
result = len(s)
c1 = introcs.count_str(s,'a')
c2 = introcs.count_str(s,'e')
c3 = introcs.count_str(s,'i')
c4 = introcs.count_str(s,'o')
c5 = introcs.count_str(s,'u')
if (c1 or c2 or c3 or c4 or c5 )== -1:
c1 == 0
c2 == 0
c3 == 0
c4 == 0
c5 == 0
sums = c1 c2 c3 c4 c5
if 0<sums<=1:
pos_a = introcs.find_str(s,'a')
result = pos_a
if ('e' in s) and (result == len(s)):
pos_e = introcs.find_str(s,'e')
result = pos_e
return result
Ответ №1:
Здесь это очень похоже на домашнее задание.
Поэтому я укажу вам правильное направление вместо того, чтобы решать его за вас.
Существует строковый метод, который возвращает самый низкий экземпляр вложенной строки. Вызывается индекс. Когда вы создаете переменную типа string или str, вам доступны некоторые встроенные методы.
Возможно, вы можете использовать этот строковый метод в своих операторах if… с помощью этого вы можете придумать несколько операторов if, которые работают для вас.
>>> s = "red bat"
>>> s.index('a')
>>> 5
>>> if s.index('a') is 5:
... print('yeet')
>>> yeet
Таким образом, вы узнаете об этом строковом методе, который уже доступен вам по умолчанию в python как встроенный для объекта класса ‘str’, который можно использовать для простого возврата первого экземпляра вложенной строки в виде целого числа.
РЕДАКТИРОВАТЬ: Помните, что 0 является целым числом и первоклассным гражданином в python. ‘foo’ имеет 2 буквы в python, а не 3. [0,1,2]
Ответ №2:
first_vowel=len(word)
current=None
for vowel in vowels:
splitted_word=[]
for i in word:
splitted_word.append(i)
try:
current=splitted_word.index(vowel)
except ValueError:
continue
if current<first_vowel:
first_vowel=current
Я попробовал это с помощью этого кода:
vowels=["a","e","i","o","u","y"]
words=["sky","alpha","test","ntd"]
for word in words:
first_vowel=len(word)
current=None
for vowel in vowels:
splitted_word=[]
for i in word:
splitted_word.append(i)
try:
current=splitted_word.index(vowel)
except ValueError:
continue
if current<first_vowel:
first_vowel=current
print(f"{word} first wovel in position {first_vowel}")
вывод:
sky first wovel in position 2
alpha first wovel in position 0
test first wovel in position 1
ntd first wovel in position 3