2015-03-22 8 views
1

Я хочу рассчитать gcd для списка чисел. Но я не знаю, что не так с моим кодом.Python gcd для списка

A = [12, 24, 27, 30, 36] 


def Greatest_Common_Divisor(A): 
    for c in A: 
     while int(c) > 0: 
      if int(c) > 12: 
       c = int(c) % 12 
      else: 
       return 12 % int(c) 
    print Greatest_Common_Divisor(A) 
+1

Вопросы, ищущих отладки помощи () должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. – thefourtheye

+1

[Этот вопрос] (http://stackoverflow.com/questions/11175131/code-for-greatest-common-divisor-in-python) показывает, что он уже реализован в стандартной библиотеке. Просто используйте 'from fractionactions import gcd'. –

+0

Кроме того, как только выполняется 'return 12% int (c)' statement, функция заканчивается. Вы имели в виду, возможно, использовать [генераторы] (http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/)? –

ответ

0

return выходит из функции. Внутри цикла for это обычно не предназначено.

1

Непонятно, почему вы используете 12 в своей функции? Вы хотите проверить свой алгоритм с помощью 12 конкретных?

Там построена функция, которая обеспечивает хорошее решение (fraction.gcd()) как указано в this answer

Если вы хотите развить свой собственный подход, вы можете сделать это следующим образом: отсортировать список и получить минимальное количество (назовите его min). Loop от 2 до min, вы можете получить отличный общий делитель из своего списка.

0

Как я вижу, ваш код будет просто в бесконечном цикле. Поскольку вы вызываете метод Greatest_Common_Divisor рекурсивно, но без базового кода. Выровняйте печати Greatest_Common_Divisor (A) и «def» в том же столбце, и эта проблема будет решена. Но все же, что ваш код делает для каждого числа ai, он занимает остаток от ai% 12, а затем просто печатает 12% (ai% 12), и нет никакой связи между ним и maximumCommonDivisor. Вот простой код для НОД (а, б), которые вы можете использовать для всего массива: «почему не этот код работает»

def gcd (a,b): 
    if (b == 0): 
     return a 
    else: 
     return gcd (b, a % b) 
1
def gcd (a,b): 
    if (b == 0): 
     return a 
    else: 
     return gcd (b, a % b) 
A = [12, 24, 27, 30, 36] 
res = A[0] 
for c in A[1::]: 
    res = gcd(res , c) 
print res 

ideone link