Top.Mail.Ru
Ответы

Срочно нужна помощь с питоном!!!

Дано число. Требуется определить, корректно ли оно. Число может быть записано в 2-ух формах:

- обычной

- экспоненциальной

Число в обычной форме не должно содержать ведущих нулей. Знак "-" должен стоять только перед непололожительным числом и только в одном экземпляре. Число также может быть записано в двоичной, восьмеричной или шестнадцатиричной системе счисления. В различных системах счисления число будет иметь вид:

<%0x><обычная форма> - в шестнадцатиричной (состоит из цифр и маленьких латинских букв). Число знаков после "0x" не должно превышать 16.

<%0o><обычная форма> - в восьмеричной. Число знаков после "0o" не должно превышать 8.

<%0b><обычная форма> - в двоичной. Число знаков после "0b" не должно превышать 20.

Знак "-" также может быть только один и должен стоять перед символом "%". Примеры корректных чисел в обычной форме: 75, -%0x6f4,%0b101110,%0o1705.

Число в экспоненциальной форме представляет собой запись следующего вида (необязательные элементы заключены в квадратные скобки):

<число в обычной форме>[<.><неотрицательное число в обычной форме, может содержать ведущие нули, не влияющие на подсчет количества знаков и стоящие до символа "%" если число не в десятичной системе счисления>]<E>[<знак "+" или "-"><число в обычной форме>].


Примеры корректных чисел в экспоненциальной форме: 1.517E+4, -%0b101.00%0xfE–19, -7E.
Входные данные
Единственная строка, не содержащая пробелов, длиной не более 50 символов.

Выходные данные
Выведите "YES", если строка удовлетворяет условию задачи или "NO" в противном случае.

Примеры
входные данные
74
выходные данные
YES
входные данные
%0x5f7.00%0b1011E-%0o71
выходные данные
YES

По дате
По рейтингу
Аватар пользователя
Знаток

Можно решить данную задачу с помощью регулярных выражений. Пример решения на языке Python:

```python
import re

# функция для проверки числа в обычной форме
def check_normal(num):
# проверяем, что число не содержит ведущих нулей
if num.startswith("0") and len(num) > 1:
return False
# проверяем, что знак "-" стоит только перед неположительным числом и только в одном экземпляре
if num.count("-") > 1 or (num.count("-") == 1 and num[0] != "-"):
return False
# проверяем, что число не содержит посторонних символов
if not re.match(r"^-?\d+$", num):
return False
return True

# функция для проверки числа в шестнадцатеричной, восьмеричной или двоичной форме
def check_hex_oct_bin(num, base):
# проверяем, что число не содержит посторонних символов
if not re.match(r"^%0[xbo][\da-fA-F]{1,%d}$" % base, num):
return False
return True

# функция для проверки числа в экспоненциальной форме
def check_exponential(num):
# проверяем, что число соответствует шаблону
if not re.match(r"^-?\d+(\.\d*)?E[+-]?\d+$", num):
return False
# разбиваем число на основную часть и экспоненту
main, exponent = num.split("E")
# проверяем, что основная часть числа корректна
if not check_normal(main):
return False
# проверяем, что экспонента корректна
if not check_normal(exponent):
return False
return True

# считываем число
num = input()

# проверяем, является ли число корректным
if check_normal(num):
print("YES")
elif check_hex_oct_bin(num, 16) or check_hex_oct_bin(num, 8) or check_hex_oct_bin(num, 20):
print("YES")
elif check_exponential(num):
print("YES")
else:
print("NO")
```

Функции `check_normal`, `check_hex_oct_bin` и `check_exponential` проверяют соответствие числа соответствующим шаблонам с помощью регулярных выражений. Если число соответствует хотя бы одному из шаблонов, программа выводит "YES", иначе - "NO".