1
def gei(a, b):
     '''
     a, b: only positive integers! If you don't, we will make you. Max 1337
     For extracting the juice of the numbers in the form of a common divider
     '''
     #Not Ruby, no to_i, but int()
     smallest = int(abs(min(a, b)))
     biggest = int(abs(max(a, b)))
     print "You inputed: ", smallest, " and ", biggest, " their order doesn't matter."
     print "Do you want to see guess numbers? Type 'yes', if you do! "
     selection = raw_input()
     print
     print
     #To evade infinite loops and too big numbers, we use count.
     count = 0
     ans = smallest
     truth = str(selection) == str('yes')
     def condition(ans, base):
         ans1 = base % ans == 0
         return ans1
     while condition(ans, biggest) == False or condition(ans, smallest) == False:
         ans -= 1
         count += 1
     if count >= 1337:
         break
     elif truth == True:
         print  ans
     if truth == True:
         print
         print
     print  "After weeks of calculation, here is your greater common divider: "
     return ans

そうそう、一般的なより大きな仕切りを抽出するための 8 年生の情報学の割り当て。私は疑問に思っていましたが、どうすれば面倒にならないようにすることができるか知っていますか? 内部で定義を使用したり、非常に多くの変数に名前を付けたりしないようにするにはどうすればよいですか?

4

4 に答える 4

8
import fractions
print fractions.gcd(4,8)
>>> 4

しかし、ソースを見ることもできます:

def gcd(a, b):
    """Calculate the Greatest Common Divisor of a and b.

    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    """
    while b:
        a, b = b, a%b
    return a

参照: http://en.wikipedia.org/wiki/Euclidean_algorithm

于 2013-01-09T09:11:43.067 に答える
1

Euclid のアルゴリズムを使用する

int GCD(int a,int b){
 if(b==0){
          return a;
 }
 return GCD(b,a%b);        
}
于 2013-03-16T09:00:55.540 に答える
0

コードで改善できる点がいくつかあります。

まず第一truthに、それは内容が何を意味するかを実際に伝えていないので、本当に貧弱な変数名です。代わりに次のようなものを使用しますshow_work

次に、変数が別の変数を均等に分割する (ブール値を返す) ことを伝える内部関数があります。でブール値に変換するのではなく、モジュラス値を直接使用することをお勧めし== 0ます。また、関数に含める必要もありません。Trueまた、値をorと比較する必要はありませんFalse。値そのものを使用する (または使用notして反転する) だけです。これらを組み合わせると、whileループの状態になりnot biggest % ans and not smallest % ansます。

最後に、すべての値を 1 つずつ試すよりも優れたアルゴリズムを使用できます。Euclid のアルゴリズムは、最大公約数をすばやく計算する優れた方法であり、Python での実装は非常に簡単です (ただし、それはあなたに任せます)。

于 2013-01-09T09:16:02.217 に答える
-1

これは簡潔で、変数に名前を付けません。

def gcd(a,b):
    return max(d for d in xrange(1, min(a, b)+1) if a % d == b % d == 0)

print gcd(15, 25)

>>> 5

しかし、それを自分のものだと主張しないでください:)

于 2013-01-09T09:07:30.453 に答える