Форум сайта python.su
0
Принимает 1 аргумент – целое число или строка, которая содержит целое число, и возвращает целое число – количество “отверстий” в десятичной записи этого числа печатными цифрами (считать, что в “4” и в “0” по одному отверстию), или строка ERROR, если переданный аргумент не удовлетворяет требованиям: является действительным или вообще не числом.
Незначущими нулями на початку запису числа, якщо такі є, нехтувати.
Пример:
Вызов функциии: count_holes('123') Возвращает: 0
Вызов функциии: count_holes(906) Возвращает: 3
Вызов функциии: count_holes('ъ001ъ') Возвращает: 0
Вызов функциии: count_holes(-8) Возвращает: 2
Вызов функциии: count_holes(-8.0) Возвращает: ERROR
Отредактировано Xryst (Март 1, 2015 21:32:12)
Офлайн
0
Вот что у меня получилось:
def count_holes(n): if type(n) != int and type(n) != str: return "ERROR" try: int(n) except ValueError: return "ERROR" counter = 0 # числа которые мают отвори list_number =['0', '4', '6', '9'] # перебор входимых данных из списком for i in str(abs(int(n))): if i in list_number: counter += 1 elif i == "8": counter += 2 return counter

Отредактировано Xryst (Март 1, 2015 22:40:09)
Офлайн
3
почитайте про long integer
Офлайн
221
Так как количество вариантов цифр достаточно ограничено можно просто перебирать известные варианты:
def count_holes(value): # словарь символов имеющих 1 и более отверстий в цифре dictionary={'0':1, '4':1, '6':1, '8':2, '9':1} # проверяем аргумент на принадлежность целочисленному типу try: int(value) except ValueError: return 'ERROR' # собственно сам подсчет result=0 for item in str(int(value)): # конструкция str(int()) здесь используется что бы убрать лидирующие нули result+=dictionary.get(item, 0) return result
return sum([dictionary.get(item, 0) for item in str(int(value))])
Офлайн
103
JOHN_16
Xryst
Вызов функциии: count_holes(-8.0) Возвращает: ERROR
JOHN_16
конструкция str(int()) здесь используется что бы убрать лидирующие нули
str(value).lstrip('0')
Офлайн
0
JOHN_16А как испаравить ошибки, выше:
Так как количество вариантов цифр достаточно ограничено можно просто перебирать известные варианты:
Отредактировано Xryst (Март 1, 2015 23:20:25)
Офлайн
103
Xryst
А как испаравить ошибки, выше
def count_holes(n): try: int(n) except ValueError: return "ERROR" counter = 0 list_number =['0', '4', '6', '9'] for i in str(abs(int(n))): if i in list_number: counter += 1 elif i == "8": counter += 2 return counter
Офлайн
0
terabaytКогда я запускаю свой код:
def count_holes(n): if type(n) != int and type(n) != str: return "ERROR" try: int(n) except ValueError: return "ERROR" counter = 0 # числа которые мают отвори list_number =['0', '4', '6', '9'] # перебор входимых данных из списком for i in str(abs(int(n))): if i in list_number: counter += 1 elif i == "8": counter += 2 return counter
Офлайн
857
Xryst
Вот что у меня получилось:
[guest@localhost nholes]$ python3 -mdoctest nholes.doct
**********************************************************************
File "nholes.doct", line 108, in nholes.doct
Failed example:
f('1\n')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 110, in nholes.doct
Failed example:
f('\n1')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 112, in nholes.doct
Failed example:
f('1 ')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 114, in nholes.doct
Failed example:
f(' 1')
Expected:
'ERROR'
Got:
0
**********************************************************************
1 items had failures:
4 of 54 in nholes.doct
***Test Failed*** 4 failures.
[guest@localhost nholes]$
JOHN_16
Так как количество вариантов цифр достаточно ограничено можно просто перебирать известные варианты:
[guest@localhost nholes]$ python3 -mdoctest nholes.doct
**********************************************************************
File "nholes.doct", line 69, in nholes.doct
Failed example:
f(1.5)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 71, in nholes.doct
Failed example:
f(1.0)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 73, in nholes.doct
Failed example:
f(-1.5)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 75, in nholes.doct
Failed example:
f(-1.0)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 108, in nholes.doct
Failed example:
f('1\n')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 110, in nholes.doct
Failed example:
f('\n1')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 112, in nholes.doct
Failed example:
f('1 ')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 114, in nholes.doct
Failed example:
f(' 1')
Expected:
'ERROR'
Got:
0
**********************************************************************
1 items had failures:
8 of 54 in nholes.doct
***Test Failed*** 8 failures.
[guest@localhost nholes]$
terabaytXryst
А как испаравить ошибки, вышеdef count_holes(n):
[guest@localhost nholes]$ python3 -mdoctest nholes.doct
**********************************************************************
File "nholes.doct", line 69, in nholes.doct
Failed example:
f(1.5)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 71, in nholes.doct
Failed example:
f(1.0)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 73, in nholes.doct
Failed example:
f(-1.5)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 75, in nholes.doct
Failed example:
f(-1.0)
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 108, in nholes.doct
Failed example:
f('1\n')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 110, in nholes.doct
Failed example:
f('\n1')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 112, in nholes.doct
Failed example:
f('1 ')
Expected:
'ERROR'
Got:
0
**********************************************************************
File "nholes.doct", line 114, in nholes.doct
Failed example:
f(' 1')
Expected:
'ERROR'
Got:
0
**********************************************************************
1 items had failures:
8 of 54 in nholes.doct
***Test Failed*** 8 failures.
[guest@localhost nholes]$
def nholes(num): if not isinstance(num, int): if not isinstance(num, str): return 'ERROR' else: if num and num[0] == '-': num = num[1:] if not num.isdigit(): return 'ERROR' num = abs(int(num)) t = (1, 0, 0, 0, 1, 0, 1, 0, 2, 1) sm = int(num == 0) while num > 0: sm += t[num % 10] num = int(num / 10) return sm
>>> from nholes import nholes as f >>> >>> f(0) 1 >>> isinstance(f(0), bool) False >>> f(1) 0 >>> isinstance(f(1), bool) False >>> f(2) 0 >>> f(3) 0 >>> f(4) 1 >>> f(5) 0 >>> f(6) 1 >>> f(7) 0 >>> f(8) 2 >>> f(9) 1 >>> >>> f(123) 0 >>> f(345) 1 >>> f(678) 3 >>> f(40689) 6 >>> f(12357) 0 >>> f(1000) 3 >>> f(1888) 6 >>> f(1448866992) 10 >>> >>> f(-1) 0 >>> f(-4) 1 >>> f(-2) 0 >>> f(-8) 2 >>> >>> f(1L) 0 >>> f(8L) 2 >>> f(-1L) 0 >>> f(-8L) 2 >>> >>> f('123') 0 >>> f('468') 4 >>> f('-123') 0 >>> f('-468') 4 >>> f('0') 1 >>> f('00') 1 >>> f('000') 1 >>> >>> f(1.5) 'ERROR' >>> f(1.0) 'ERROR' >>> f(-1.5) 'ERROR' >>> f(-1.0) 'ERROR' >>> >>> f('1.5') 'ERROR' >>> f('1.0') 'ERROR' >>> f('-1.5') 'ERROR' >>> f('-1.0') 'ERROR' >>> >>> f('') 'ERROR' >>> f('a') 'ERROR' >>> f('ab') 'ERROR' >>> f('0a') 'ERROR' >>> f('a0') 'ERROR' >>> f('aa0') 'ERROR' >>> f('0aa') 'ERROR' >>> f('a0a') 'ERROR' >>> f('00a') 'ERROR' >>> f('a00') 'ERROR' >>> >>> f('1\n') 'ERROR' >>> f('\n1') 'ERROR' >>> f('1 ') 'ERROR' >>> f(' 1') 'ERROR' >>>
Отредактировано py.user.next (Март 14, 2015 00:24:20)
Офлайн
0
TroSerЯ и так не чего и не понял(
long integer
Офлайн