Как проверить правильность записи целого числа в восьмеричной системе счисления
Программа должна вывести ответ 'YES', если строка представляет собой правильную запись целого числа в восьмеричной системе счисления, и 'NO', если запись ошибочна.
a = int(input())
if ' %s ' % oct(a) == 'TRUE':
print('YES')
else:
print('NO')
Ответы (2 шт):
Можно просто указать для int восьмеричную систему счисления. Если не упадёт - значит всё нормально.
x = input()
try:
y = int(x, 8)
print('YES')
except:
print('NO')
Если вы хотите проверить что на входе восьмеричное целое со знаком, можно проверить что функция int(x, 8) не приводит к ошибке:
x = input()
is_oct = True
try:
int(x, 8)
except ValueError:
is_oct = False
if is_oct:
print('YES')
else:
print('NO')
$ echo 67 | python is_oct.py YES $ echo 68 | python is_oct.py NO $ echo -67 | python is_oct.py YES $ echo -68 | python is_oct.py NO
Помимо знака в начале числа этот способ разрешает подчёркивания и префикс '0o' (Integer literals):
$ echo 10_000 | python is_oct.py YES $ echo 0o67 | python is_oct.py YES
Если вам не нравятся эти (довольно странные) дополнения к восьмеричным числам, надо проверять цифры вручную. Во-первых, надо убедиться что строка не пустая. Во-вторых, проверить что каждый символ - восьмеричная цифра:
octs = set('01234567')
x = input()
is_oct = len(x) > 0 and all(d in octs for d in x)
if is_oct:
print('YES')
else:
print('NO')
Те же идеи в другом изложении. Из символов строки x строим множество, проверяем что оно подмножество восьмеричных цифр:
octs = set('01234567')
x = input()
is_oct = len(x) > 0 and set(x) <= octs
if is_oct:
print('YES')
else:
print('NO')
Не боитесь регулярных выражений? Тогда так:
import re
x = input()
is_oct = re.match('^[0-7]+$', x) is not None
if is_oct:
print('YES')
else:
print('NO')