Найти - Пользователи
Полная версия: числа Армстронга
Начало » Python для новичков » числа Армстронга
1
yyyuuu
здравствуйте друзья. Начал изучать язык программирования 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)
py.user.next
Второй while не нужен.
yyyuuu
py.user.next
Второй while не нужен.
Тогда Я снова не понимаю что не так. Второй вайл ведь собирает значения из списка и возводит их в степень
yyyuuu
Или же может кто знает где простенькие задания есть для питон, возможно еще сложное Я выбрал
py.user.next
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]:
marvellik
yyyuuu
Или же может кто знает где простенькие задания есть для питон
и обучение и задачи по теме урока
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB