Проверка длины

#python #python-3.x #validation

#python #python-3.x #проверка

Вопрос:

Итак, нам дали задачу, которая вводит 6 цифр, я хочу добавить проверку длины в свой список, потому что я уже выполнил проверку своего номера. по какой-то причине, хотя я ввел шесть чисел, он печатает («только 6 цифр! Пожалуйста, попробуйте еще раз «). в любом случае, это мой код (прошу прощения за построение кода, поскольку я только начал изучать python)

 while True:

numbers = input("Enter 6 digits: ")
if numbers.isalpha():
    print("Invalid Input!", numbers ," is not a number!")
else:
    NumberList = numbers.split()
    if len(NumberList) == 6:
        print("user list is ", NumberList)
        break
    else:
        print ("6 digits only! Please try again")
 

Комментарии:

1. В чем именно заключается ваш вклад?

2. наши инструкции выглядят следующим образом 1. Попросите пользователя ввести 6-значное число. Пример. 123456 2. Удалите последнюю цифру введенного числа. Например. Удаление последней цифры из 123456 возвращает 12345. 3. Разделите новое 5-значное число на 7 и проверьте, соответствует ли его остаток удаленной цифре на шаге 2. Например. Остаток от деления 12345 на 7 равен 4. Удаленная цифра равна 6. Следовательно, они не равны. 4. Отобразите результат.

3. Вы не можете выполнить split() , чтобы разделить заданную строку.

4. Попробуйте заменить numbers.split() на list(numbers)

Ответ №1:

split Функция, вызываемая без аргументов, разбивается на пробелы.

Итак, ваша строка не разбивается на список (вы получаете только список с одним элементом, вашей строкой).

 print("123456".split())

['123456']
 

В этом случае, чтобы разделить строку, вы должны использовать: NumberList = list(numbers) .

 list("123456")
['1', '2', '3', '4', '5', '6']
 

Ответ №2:

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

Это splitting this string приведет к ['splitting,'this','string'] , но что-то вроде 123456 , приводит к ['123456'] и поэтому длина всегда равна единице.

Способ решить эту проблему — преобразовать строку в список:

Заменить

 NumberList = numbers.split()
 

с помощью

 NumberList = list(numbers)
 

Это должно привести к ['1','2','3','4','5','6'] и, следовательно, должно дать вам правильную длину.

Ответ №3:

string.split() Метод без указанного аргумента создаст список подстрок, разбивая исходную строку на любые пробелы. Если ваш ввод, скажем 123456 , , то numbers.split() будет выдан ["123456"] , поскольку во входной строке нет пробелов. В этом случае len(NumberList) равно 1, и именно поэтому ваша проверка не выполняется.

Вместо этого вы могли бы просто проверить len(numbers) == 6 .

Если вы хотите превратиться "123456" в ["1", "2", "3", "4", "5", "6"] (поскольку кажется, что это то, что вы хотите распечатать), вы можете использовать list(numbers)

Ответ №4:

 while True:
    numbers = input("Enter 6 digits: ")
    if numbers.isalpha():
        print("Invalid Input!", numbers ," is not a number!")
    else:
        NumberList = len(numbers)
        if NumberList == 6:
            print("user list is", NumberList)
            break
        else:
            print ("6 digits only! Please try again")
 

Ответ №5:

Я предполагаю, что ваш ввод — это что-то вроде «123456», во-первых, ваша проверка str.isalpha() вернет true, только если все элементы строки являются буквами, что означает, что «123asd» будет считаться ложным и, следовательно, действительным для вашей программы, что является ошибкой, во-вторых str.split() , будет разделять строку только в соответствии сдля разделителя char по умолчанию используется пробел, если ваша строка «123456», результатом разделения будет просто список из одного элемента с полной строкой, потому что в этой строке нет пробела.

 while True:
    numbers = input("Enter 6 digits: ")
    if sum([n.isalpha() for n in numbers]):
        print("Invalid Input!", numbers ," is not a number!")
    else:
        NumberList = list(numbers)
        if len(NumberList) == 6:
            print("user list is ", NumberList)
            break
        else:
            print("6 digits only! Please try again")
 

Кроме того, нет необходимости разбивать строку на список, если единственная операция, которую вам нужно выполнить, это проверить ее длину, вы можете просто использовать len(numbers)

Ответ №6:

 while True:
    num = input("Enter a Number: ")
    try:
        numbers = [int(i) for i in num]
        if len(numbers) == 6:
            print('valid')
            numbers = numbers[:5]
            print(numbers)
        else:
            print('invalid')
    except ValueError:
        print('only numbers')
 

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

Комментарии:

1. Я хотел внести это в список, потому что вторая инструкция в нашей деятельности гласит, что 2. Удалите последнюю цифру введенного числа. Например. Удаление последней цифры из 123456 возвращает 12345. есть предложения?

2. спасибо, кстати, еще раз вопрос. в нашей инструкции говорится, что 3. Разделите новое 5-значное число на 7 и проверьте, эквивалентен ли его остаток удаленной цифре на шаге 2. Пример. Остаток от деления 12345 на 7 равен 4. Удаленная цифра равна 6. Следовательно, они не равны. применимо ли это в списке?

3. Ммм. Любые математические проблемы, вероятно, находятся вне моего диапазона из-за возраста. В вашем сообщении много правильных ответов. Вы, вероятно, можете спросить их -?