Я не думаю, что методы str.isspace
, str.isalpha
и str.isdigit
делают то, что вы ожидаете от них. Для начала все они проверяют, имеют ли все символы в строке, которую вы вводите, того типа, который описан в их имени. Ваш код ожидает, что они вернут True
, если любой символов совпадает. То есть, если есть любые пробелы, вы хотите удалить их и показать две длины, до и после.
Нет единственного строкового метода, который бы выполнял этот тест для вас в Python. Вы можете использовать регулярные выражения (которые являются более мощными, но намного более сложными), или вы можете написать немного более сложный код для проведения теста. Я бы предложил использовать функцию any
и передать ей выражение-генератор, которое вызывает нужный метод для каждого символа в строке.
if any(c.isspace() for c in user_str):
...
Это может быть не совсем то, что вы хотите для всех ваши тесты. Желаемая логика c вашего кода не совсем очевидна, так как есть ряд угловых случаев, которые ваш вывод не учитывает конкретно. Допустима ли строка, содержащая как буквы, так и цифры? Как насчет того, у которого есть пробелы между числами, но нет букв вообще? Возможно, вам придется изменить порядок ваших операторов if
/ elif
/ else
, чтобы они соответствовали вашим намерениям.
Я также хотел бы отметить, что имя переменной, которое вы использовали для ввода пользователя, new_length
, очень вводит в заблуждение. Это не длина, это строка, которую вы хотите измерить! Гораздо проще делать ошибки logi c в переменных, которые имеют вводящие в заблуждение или нечеткие имена переменных, поэтому иногда нужно go вернуть назад и пересмотреть имена, которые вы выбрали ранее, иногда хорошая идея, так как это может улучшить ясность вашего кода много! Описательные имена переменных хороши, но это компромисс между ясностью и краткостью, так как длинные имена утомительны для ввода (и склонны к опечаткам). Они также могут привести к проблемам с длиной строки, что может сделать менее удобным одновременное отображение всего кода на экране редактора.