簡體   English   中英

Python 3 // 如果字符串不包含元音則打印錯誤

[英]Python 3 // Printing an error if a string contains no vowels

編寫一個函數,它接受一個沒有空格的字符串參數,在字符串中搜索元音(字母“a”、“e”、“i”、“o”、“u”),用大寫字符替換它們, 並打印出大寫的新字符串,並從函數中返回新字符串。 您應該使用isalpha驗證它是一個字符串參數(因此不允許使用空格!),如果不是,則返回錯誤(錯誤消息應該帶有“錯誤:”)。

例如,如果字符串輸入是“miscellaneous”,那么您的程序將打印出來並返回“mIscEllAnEOUs”。 如果字符串中沒有元音,則打印“Nothing to convert!” 並返回None

到目前為止,這就是我所擁有的,但我在作業中以粗體顯示的部分遇到了麻煩。

def uppercase(word):
    vowels = "aeiou"
    error_msg = "Error: not a string."
    nothing_msg = "Nothing to convert!"  
   

    new_word = []
    
    for letter in word:
        
        if word.isalpha():
            if letter in vowels:
                new_word.append(letter.upper())
            
            else:
                new_word.append(letter.lower())
        
        else:
            print(error_msg)
            return None

    new_word = ''.join(new_word)
    return new_word

要檢查字符串是否全部為字母,您可以使用str.isalpha 要檢查是否包含元音,您可以在any使用生成器表達式來確認至少一個字母是元音。 最后,您可以使用join另一個生成器表達式進行轉換,只將元音大寫,然后返回一個新字符串。

def uppercase(word):
    if not word.isalpha():
        return 'Error'
    if not any(letter in 'aeiou' for letter in word):
        return 'Nothing to convert!'
    return ''.join(letter.upper() if letter in 'aeiou' else letter for letter in word)

例子

>>> uppercase('miscellaneous')
'mIscEllAnEOUs'
>>> uppercase('abc123')
'Error'
>>> uppercase('xyz')
'Nothing to convert!'

只是為了提供一種不同的方法,除了 CoryKramer 回答的內容之外,您還可以使用 python re模塊:

import re

def uppercase(word):
    if not word.isalpha():
        return 'Error'
    if not any(letter in 'aeiou' for letter in word.lower()):
        return 'Nothing to convert!'
    return re.sub(r'[aeiou]', lambda m: m.group().upper(), word)

我覺得這樣更簡潔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM