Python 3异常:TypeError:函数缺少1个必需的位置参数:“words”

2024-07-05 14:57:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的函数需要一个参数词,但我希望如果没有参数,程序不会崩溃。

def get_count(words):
    try:
        consonants_str = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
        vowels_str = "aeiouAEIOU"
        consonants_ls = []
        vowels_ls = []
        words_ls = []
        result = {"vowels": 0, "consonants": 0}`

        for element in consonants_str:
            consonants_ls.append(element)

        for element in vowels_str:
            vowels_ls.append(element)

        if type(words) != type(None):
            for element in words:
                words_ls.append(element)

            for element in words_ls:
                if element in vowels_ls:
                    result["vowels"] += 1
                if element in consonants_ls:
                    result["consonants"] += 1
                else:
                    continue
            else:
                result["vowels"] = 0
                result["consonants"] = 0

    except TypeError:
        result["vowels"] = 0
        result["consonants"] = 0

    answer = {"vowels": result["vowels"],"consonants": result["consonants"]}

    return answer`

所以如果我用

print(get_count())

我想,程序不会像标题中那样显示错误。异常应该在get_countdef中,因为它应该是一个关闭的文件。我不在同一个文件中执行,因此异常应该独立于其他文件。

我希望你明白我的意思。。。

谢谢你的回答! 诺亚布勒


Tags: 文件infor参数getifcountelement
3条回答

您没有将参数传递给函数,当您声明要使用def(words)调用名为words的参数时,请这样调用函数或使用您希望的任何字符串输入

print(get_count('AAAABBBKDKDKDKDA'))

如果希望程序在未传递参数时退出,请执行此操作(记住单词现在是元组)

import sys

def get_count(*words):
    if not words: # if words is empty, no argument was passed
        sys.exit('You passed in no arguments')
    else:
        pass # do something with the items in words

您可以使用可选参数

例如:

def info(name, age=10):

是具有可选参数age的函数。

有效的信息调用是:

info("Roy")
info("Roy", 15)

在您的情况下,您可以将函数更改为:

def get_count(words=[]): # Assuming words is a list. If it is a string you can use words=""

因此,如果不传递任何参数,则默认情况下,函数将words作为空的list

奖金:

我发现了

for element in consonants_str:
    consonants_ls.append(element)

for element in vowels_str:
    vowels_ls.append(element)

你不需要这个。相反,您可以这样做:

consonants_ls = list(consonants_str)
vowels_ls = list(vowels_str)

Python之道:

>>> vowels = 'aeiou'
>>> def get_count(words):
...     words = words.lower()
...     total_vowels = sum(words.count(x) for x in vowels)
...     return {'vowels':total_vowels, 'consonants':len(words)-total_vowels}
... 
>>> get_count('AAAABBBKDKDKDKDA')
{'consonants': 11, 'vowels': 5}

使用collections.Counter

>>> def get_count(words):
...     words = words.lower()
...     my_counter = collections.Counter(words)
...     total_vowels = sum(my_counter.get(x,0) for x in 'aeiou')
...     return {'vowels':total_vowels, 'consonants':len(words)-total_vowels}
... 
>>> get_count('AAAABBBKDKDKDKDA')
{'consonants': 11, 'vowels': 5}

相关问题 更多 >