Используйте * args в функции и получите эту ошибку: «ожидаемая строка или байтовоподобный объект» - PullRequest
0 голосов
/ 03 апреля 2019

Я пытался написать программу в этих двух ситуациях:

1. Если пользователь не передает свою строку в качестве аргумента функции, используйте функцию ввода, чтобы получить его строку.

2. получить функцию ввода в виде строки, если пользователь передает свою строку в качестве аргумента функции.

После получения строки от пользователя вычислите частоту слов.Итак, это моя функция:

def words_frequency(*string_input):
    if not string_input:
        string_input = input("Please write your text: ")
    else:
        string_input = string_input
    input_words = re.sub('[:,:?/;.]', ' ', string_input)
    sorted_words = input_words.lower().split()
    sorted_words.sort()
    print(sorted_words)
    words_dict = {}
    for word in sorted_words:
        words_dict[word] = words_dict.get(word, 0) + 1
    return words_dict

str1 = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Lorem ipsum dolor sit amet, consectetur adipisicing elit."
print(words_frequency(str1))

Все в моей функции в порядке и

Я проверил свою функцию обычным методом для получения аргумента или получения ввода, и оба из нихбеги и работай в отдельной ситуации. Но я не могу использовать их вместе.

Вы можете мне помочь?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Если я вас правильно понимаю, я верю, что вы хотите иметь возможность запускать функцию words_frequency () либо со строкой в ​​качестве ввода, либо заставлять ее запрашивать ввод, если функция запускается без ввода.

Выможно добиться этого, изменив следующее:

def words_frequency(*string_input):

на:

def words_frequency(string_input=""):

Я надеюсь, что это помогло, и, возможно, посмотрите эту ссылку для объяснения аргументов функциив python:)

И если вы настаиваете на использовании * string_input, убедитесь, что вы превратили его в String. В результате вы также можете использовать этот метод:

def words_frequency(*string_input):
    if not string_input:
        string_input = input("Please write your text: ")
    else:
        string_input = str(string_input)
0 голосов
/ 03 апреля 2019

В Python параметр функции со * перед своим именем определяет список аргументов . Таким образом, ваша функция ожидает не строку, а список параметров. Вам следует изменить *string_input (что означает несколько аргументов) на string_input="" (один необязательный аргумент; если он не определен, используйте "").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...