2017-11-02 12 views
-1
def gcdIter(a, b): 

''' 
a, b: positive integers 

returns: a positive integer, the greatest common divisor of a & b. 
''' 

test = 0 
if a > b: 
    b = test 
else: 
    a = test 
while test != 1: 
    if a%test == 0 and b%test == 0: 
     return test 
    test -= 1 
return 1 

& bの最大公約数を見つけたいのですが、なぜエラーになるのですか?整数除算またはゼロでモジュロ

+1

何のエラーそれは与える?関数内にコードをインデントしていないように見えます。この場合、コードは関数内にありません。この関数は空であり、SyntaxErrorを送出します。 –

+1

'test = 0' - なぜエラーが出ないのですか? –

答えて

0
if a%test == 0 and b%test == 0: 

この行は正しくありませんか?

test = 0 

これは動作しないため、% 0は実行できません。他の方法ではなくtest = atest = bを実行します。また、test = min(a, b)を実行するだけで済みます。また、ユークリッドアルゴリズムを使用します。

ifがスコープを持っていますが、再び、ちょうどifを取り出し、test = min(a, b)を行いませんので、あなたはtest = 0は必要ありません。

あなたはZeroDivisionErrorにつながるあなたの最初の反復でゼロ除算しようとしている
0

:ゼロ

if a%test == 0 and b%test == 0: 

による整数除算や剰余あなたはあなたのコードを変更する必要があります。

b = test #should be test = b 
a = test #should be test = a