Поиск первой гласной строки только с помощью операторов if

#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