Функция Isspace в python - PullRequest
0 голосов
/ 24 марта 2020

У меня возникают проблемы при попытке выполнить этот код, я хочу, чтобы пользователь ввел значение, программа проверяет, является ли это значение строкой, а затем возвращает длину. Если значение содержит пробелы, программы удаляют пробелы и печатают длину. Но если оно содержит целочисленные значения, программа возвращает «Нет целых чисел»

Это код:

def length(Name):
    long = len(Name)
    return long

new_length = input("Please Enter Your name You can use Spaces: ")
value1 = new_length
if value1.isspace() == True:
  print("This is Before Removing Spaces: " + value1)
  value2 = value1.replace(" ", "")
  print("This is After Removing Spaces: " + value2)
elif value1.isalpha() == True: 
  print("Here is The Length: ", length(value1))
elif value1.isdigit() == True:
    print("Integers are not allowed! ")
else:
    print("There's someting wrong with  "+ value1)

Так что, если вы можете мне помочь с этим, я ценю это. Спасибо

Ответы [ 4 ]

1 голос
/ 24 марта 2020

Я не думаю, что методы 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 вернуть назад и пересмотреть имена, которые вы выбрали ранее, иногда хорошая идея, так как это может улучшить ясность вашего кода много! Описательные имена переменных хороши, но это компромисс между ясностью и краткостью, так как длинные имена утомительны для ввода (и склонны к опечаткам). Они также могут привести к проблемам с длиной строки, что может сделать менее удобным одновременное отображение всего кода на экране редактора.

0 голосов
/ 24 марта 2020

Предлагаю прочитать документацию в этих случаях. Для isspace, обратите внимание здесь , что

Верните True, если в строке есть только пробельные символы и хотя бы один символ, иначе False.

То есть, если там есть что-то, что не является пробелом, это будет Ложь. Что раздражает, но зачем проверять в первую очередь? Просто сделай замену! Если нет пробелов, это ничего не сделает. Если вам нужно для печати этих утверждений, вы можете сделать

if ' ' in value1:
  ...

(конечно, это не учитывает все возможные виды пробелов, проверьте другие ответы для выполнения для l oop если вам это нужно)

Далее, я считаю, что вам нужно удалить elif s и просто использовать операторы if, поскольку обратите внимание, что если вы введете имя с пробелом, оно будет напечатайте имя с удаленными пробелами ... и ничего после этого. Даже если в нем есть целые числа. Это потому, что операторы elif не выполняются один раз над ними.

Есть много других вещей, которые вы должны рассмотреть, но эти два, я думаю, вы должны рассмотреть в первую очередь. Надеюсь, это полезно!

0 голосов
/ 24 марта 2020

Вы можете использовать модуль re в Python для проверки пробелов в вашей строке. Возвращает True, если есть пробелы, и False в противном случае.

import re
def length(Name):
    long = len(Name)
    return long

new_length = input("Please Enter Your name You can use Spaces: ")
value1 = new_length
if re.search('\s', value1):
  print("This is Before Removing Spaces: " + value1)
  value2 = value1.replace(" ", "")
  print("This is After Removing Spaces: " + value2)
  print("Here is The Length: ", length(value2))
elif value1.isalpha() == True: 
  print("Here is The Length: ", length(value1))
elif value1.isdigit() == True:
    print("Integers are not allowed! ")
else:
    print("There's someting wrong with  "+ value1)
0 голосов
/ 24 марта 2020

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

def hasNumbers(inputString):
        return any(char.isdigit() for char in inputString)

Возвращает истину, если есть число, и ложь, если его нет.

Что касается пробелы, которые вы можете пропустить isspace (). Использование функции replace () будет выполнено, даже если пробелов нет.

stri='jshsb sjhsvs jwjjs'
stri=stri.replace(' ','')
...