#python
Вопрос:
Итак, я пытаюсь создать программу, в которой пользователи могут просто вводить число, но для числа минус знак минус (-) только один перед числом. Когда пользователи вводят неверный ввод, он повторяется всего до 5 раз.
Итак, я просто хочу, чтобы номер ввода пользователя был таким
-1
-12
-123
Не так, как сейчас
—1
—12
1-
1—
12-
12—
-1-
-12-
1-1
-1-1
и некоторые подобные трюки
Объяснение утверждений if:
len(nama) > 0
- Этого следует избегать, если пользователь вводит пустой ввод или просто нажимает Enter.
re.match("^[-0-9]*$", nama)
- Это делается для того, чтобы пользователи просто вводили число (0-9) и знак минус (-).
nama[1:] != "-"
- Это делается для того, чтобы пользователь мог просто ввести знак минус (-) перед номером.
nama[1:-1] != "-"
- Это делается для того, чтобы избежать ввода пользователем знака минус (-) после первого знака минус до латте.
all([len(nama) > 0, re.match("^[-0-9]*$", nama), nama[1:] != "-", nama[1:-1] != "-"])
- Это для того, чтобы, если все утверждения верны, перейти к следующему. Но я не был уверен, что использование И или ИЛИ для этого или кода выглядит не так хорошо.
Я пробовал это, но почему после того, как я ввел более одного знака минус (-) перед номером и сзади, все равно выводите «Бенар». Это не то, чего я хочу.
Это мой первый простой код:
for retry_nama in range(5):
nama = input("masukkan nama: ")
if all([len(nama) > 0, re.match("^[-0-9]*$", nama), nama[1:] != "-", nama[1:-1] != "-"]):
print("Benar")
input("press ENTER to exit")
break
print("salah, try again.")
else:
print("You keep making invalid name, exiting now.")
sys.exit(1)```
Ответ №1:
Для такой простой проверки нет необходимости в регулярных выражениях:
def is_int(s):
s = str(s)
if s[0] in ('-', ' '):
return s[1:].isdigit()
return s.isdigit()
for retry_nama in range(5):
nama = input("masukkan nama: ")
if is_int(nama):
print("Benar")
input("press ENTER to exit")
break
print("salah, try again.")
else:
print("You keep making invalid name, exiting now.")
Комментарии:
1. Мы чудесно, это может решить мою проблему. Я все еще изучаю основы python вчера и все еще знаю совсем немного. Таким образом, он может использовать функцию, а не использовать re. Спасибо
2. но есть ошибка, когда я ввожу пустой ввод, возникает ошибка. Обратная связь (последний последний вызов): Файл «D:….», строка 10, в <модуле>, если is_int(nama): Файл «D:….», строка 3, в is_int, если s[0] в (‘-‘, ‘ ‘): Ошибка индекса: строковый индекс выходит за пределы диапазона
3. это легко исправить
is_int
, я уверен, что вы сможете это понять 🙂
Ответ №2:
Другой подход состоял бы в том, чтобы привести число int
и посмотреть, что произойдет:
sample_input = [
"-1",
"-12",
"-123",
"--1",
"--12",
"1-",
"1--",
"12-",
"12--",
"-1-",
"-12-",
"1-1",
"-1-1",
]
for inp in sample_input:
try:
number = int(inp)
print(f"Input is a valid int: {number}")
except ValueError:
print(f"{inp} is not a valid int.")
Какие отпечатки:
Input is a valid int: -1
Input is a valid int: -12
Input is a valid int: -123
--1 is not a valid int.
--12 is not a valid int.
1- is not a valid int.
1-- is not a valid int.
12- is not a valid int.
12-- is not a valid int.
-1- is not a valid int.
-12- is not a valid int.
1-1 is not a valid int.
-1-1 is not a valid int.
Что решает ваши примеры.
Ваше здоровье!
Комментарии:
1. Это может быть без использования образца?
2. Что ты имеешь в виду? Если вы имеете в виду пустую строку:
int('')
она вызывает то же исключение.3. Я имею в виду, это может быть без использования sample_input? так что это автоматически, а не я все еще заполняю образец первым
4. Конечно, мой код проверяет все элементы
sample_input
, чтобы убедиться, что все возможности, о которых вы спрашивали, были учтены, но единственная важная часть находится внутриtry except
блока: эти 5 строк-это то, что вам нужно.