Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 15, 2017 15:09:53

yyyuuu
Зарегистрирован: 2017-06-08
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

числа Армстронга

здравствуйте друзья. Начал изучать язык программирования Python. Понравилось но многого не понимаю. И так же чтобы за меня код написали не хочу.
Запутался, если кто поймет то подскажите мне пожалуйста. Правильно ли у меня идет алгоритм, и как мне получить сумму кубов чисел если оно 3 значное или четырех заранее это не указано все вводится с руки

 import math
def Armstrong (x):
    res = []
    resultO = []
    i = 0
    count = 0
    str1 = (len(x))
    for result in x:
        res.append(int(result))
    while count < str1:
            while i < str1:
                result1 = pow(res[i],str1)  
                print(result1)
                i+=1
                resultO.append(result1)
                print(resultO)
                count +=1
    
str1 = input("Enter Integer Number ")
Armstrong(str1)

Офлайн

#2 Июнь 16, 2017 01:55:01

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

числа Армстронга

Второй while не нужен.



Офлайн

#3 Июнь 16, 2017 02:41:29

yyyuuu
Зарегистрирован: 2017-06-08
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

числа Армстронга

py.user.next
Второй while не нужен.
Тогда Я снова не понимаю что не так. Второй вайл ведь собирает значения из списка и возводит их в степень

Офлайн

#4 Июнь 16, 2017 02:42:16

yyyuuu
Зарегистрирован: 2017-06-08
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

числа Армстронга

Или же может кто знает где простенькие задания есть для питон, возможно еще сложное Я выбрал

Офлайн

#5 Июнь 16, 2017 04:14:30

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

числа Армстронга

yyyuuu
Второй вайл ведь собирает значения из списка и возводит их в степень
Там надо использовать операцию += с результатом.

Краткий вариант на строке
  
>>> def isarm(s):
...     return int(s) == sum(i ** len(s) for i in map(int, s))
... 
>>> isarm('153')
True
>>> isarm('154')
False
>>>
Но на строках работать с числами не принято, так как работа со строками происходит гораздо медленнее, чем с числами. Когда функция вызывается десятки тысяч раз, это имеет значение. Да и сами строки могут содержать неожиданные символы, которые никак к числам не относятся, поэтому являются источником ошибок и требуют предварительной проверки строки на правильное число в ней.

Поэтому такие функции делают на числах
  
>>> def isarm(num):
...     if num == 0:
...         return True
...     lst = []
...     length = 0
...     result = 0
...     tmp = num
...     while tmp > 0:
...         lst.append(tmp % 10)
...         length += 1
...         tmp //= 10
...     for i in lst:
...         result += i ** length
...     return num == result
... 
>>> isarm(153)
True
>>> isarm(154)
False
>>>


Если по времени посмотреть, то числовая версия, хоть она и больше по размерам, но выполняется быстрее в два раза.

ipython3
 
In [1]: %paste

def isarm(num):
if num == 0:
return True
lst = []
length = 0
result = 0
tmp = num
while tmp > 0:
lst.append(tmp % 10)
length += 1
tmp //= 10
for i in lst:
result += i ** length
return num == result
## -- End pasted text --

In [2]: %timeit isarm(153)
100000 loops, best of 3: 3.51 us per loop

In [3]: %timeit isarm(154)
100000 loops, best of 3: 3.49 us per loop

In [4]:

In [1]: %paste

def isarm(s):
return int(s) == sum(i ** len(s) for i in map(int, s))
## -- End pasted text --

In [2]: %timeit isarm('153')
100000 loops, best of 3: 6.07 us per loop

In [3]: %timeit isarm('154')
100000 loops, best of 3: 6.11 us per loop

In [4]:



Отредактировано py.user.next (Июнь 16, 2017 04:37:02)

Офлайн

#6 Июнь 17, 2017 21:25:45

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

числа Армстронга

yyyuuu
Или же может кто знает где простенькие задания есть для питон
и обучение и задачи по теме урока

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version