Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2015 20:49:25

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

Принимает 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)

Офлайн

#2 Март 1, 2015 22:22:16

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

Вот что у меня получилось:

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

P.S. Ну есть ошибки подскажите как исправить?:

Отредактировано Xryst (Март 1, 2015 22:40:09)

Офлайн

#3 Март 1, 2015 22:46:55

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

почитайте про long integer

Офлайн

#4 Март 1, 2015 22:49:02

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

Так как количество вариантов цифр достаточно ограничено можно просто перебирать известные варианты:

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))])



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Март 1, 2015 22:54:18

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

JOHN_16

Xryst
Вызов функциии: count_holes(-8.0) Возвращает: ERROR

JOHN_16
конструкция str(int()) здесь используется что бы убрать лидирующие нули
str(value).lstrip('0')



————————————————
-*- Simple is better than complex -*-

Офлайн

#6 Март 1, 2015 23:07:15

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

JOHN_16
Так как количество вариантов цифр достаточно ограничено можно просто перебирать известные варианты:
А как испаравить ошибки, выше:

Отредактировано Xryst (Март 1, 2015 23:20:25)

Офлайн

#7 Март 1, 2015 23:15:59

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

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



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Март 1, 2015 23:27:07

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

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
Возникают ошибки, как их исправить???:

Офлайн

#9 Март 2, 2015 00:04:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

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]$

terabayt
Xryst
А как испаравить ошибки, выше
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

Тесты nholes.doct:
>>> 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'
>>>

Add
Добавил значения с L в тесты.



Отредактировано py.user.next (Март 14, 2015 00:24:20)

Офлайн

#10 Март 2, 2015 00:09:03

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу понять как разработать функцию count_holes(n)

TroSer
long integer
Я и так не чего и не понял(

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version