Функция («фамилия, имя») сообщает: TypeError: может объединять только str (не «int») в str - PullRequest
0 голосов
/ 13 октября 2019

Мне нужно создать функцию, которая принимает на вход строку, содержащую имя в формате «Last_Name, First_Name», и печатает приветственное сообщение с именем, фамилией и фамилией, и сообщает человеку длину своего имени. ,Функция должна быть в состоянии обработать неправильный ввод и напечатать сообщение: Ошибка формата ввода: пожалуйста, используйте «Last_Name, First_Name». Ниже приведено то, что у меня есть, и ошибка, которую я получаю. Я не смог выяснить, как создать сообщение об ошибке, если пользователь вводит информацию в неправильном формате:

input_name = input("Enter your name in last name, first name format")
Last_name, First_name =input_name.strip().split(',')
Full_name=First_name + ' ' + Last_name
print(Full_name + ' your first name is ' + len(First_name) + ' letters in length')

TypeError
Traceback (most recent call last)
<ipython-input-14-14516c1daf2c> in <module>()
  2 Last_name, First_name =input_name.strip().split(',')
  3 Full_name=First_name + ' ' + Last_name
----> 4 print(Full_name + ' your first name is ' + len(First_name) + ' letters in length')
TypeError: can only concatenate str (not "int") to str

Ответы [ 2 ]

1 голос
/ 13 октября 2019

len() возвращает целое число - чтобы объединить его со строкой, вам нужно сначала превратить его в строку. Вы можете сделать это с помощью функции str().

print(Full_name + ' your first name is ' + str(len(First_name)) + ' letters in length')

Чтобы ответить на вторую часть этого вопроса: как сообщить пользователю, что формат ввода неверен, вы можете выполнить простую обработку ошибок. Если формат ввода неправильный, строка

Last_name, First_name =input_name.strip().split(',')

может вызвать какое-то исключение (слишком много значений для распаковки, недостаточно значений для распаковки и т. Д.). Таким образом, вы можете сделать это:

try:
    Last_name, First_name =input_name.strip().split(',')
except:
    print("Input format is wrong")
    sys.exit(1)

Конечно, есть более надежные способы сделать это. Например, вы можете:

1) Использовать регулярное выражение для проверки формата ввода

2) Проверить строку ввода на наличие , перед разбиением

3)Проверьте длину строкового массива после .split() и предоставьте пользователю более конкретное сообщение об ошибке

0 голосов
/ 13 октября 2019

Вы получаете эту ошибку из-за конкатенации len (First_name), которое возвращает целое число со строкой.

Для проверки имени можно использовать сопоставление с шаблоном регулярного выражения.

import re

def is_valid(name: str):
    pattern = re.compile(r'^\s*\w+\s*,\s*\w+\s*$')
    return pattern.match(name)


def print_welcome_message(name: str):
    if is_valid(name):
        last_name, first_name = map(str.strip, name.split(','))
        message = f'{first_name} {last_name} your first name is {len(first_name)} letters in length'
        print(message)
    else:
        print("Input format error: please use 'Last_Name, First_Name'")

if __name__ == '__main__':
    input_name = input("Enter your name in last name, first name format")
    print_welcome_message(input_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...