1

だから私は初心者としてPythonを学んでいて、Python 3のコンピュータ科学者のように考える方法を使用しています.コピー/貼り付けの代わりに自分の脳からコーディングを行う反復についての章にいるので、覚えやすくなります. .

乗算表セクションの最後の部分を実行すると、レッスンで示したものと同じ出力が得られましたが、私のほうがきれいなようです (引数が少ない)。私はまだトレース プログラムのコツをつかもうとしているところなので、違いを理解するのに苦労しています。私のコードがテキストのバージョンよりも効率が悪いか、エラーが発生しやすいかどうかを誰かに知らせて、この頭痛の種を終わらせるのに役立つことを望んでいました;)。

def print_multiples(n, high):         #This is the e-book version
    for i in range(1, high+1):
        print(n * i, end='   ')
    print()

def print_mult_table(high):
    for i in range(1, high+1):
        print_multiples(i, i+1)       #They changed high+1 to i+1 to halve output

ソース

i+1 が print_multiples で 'high' になり、print_multiples のループで +1 が再び追加されるため、結果に +1 が多すぎるようです。(私はまた、彼らが end='\t' の代わりに end=' ' を保持していることに気付きました。

def print_multiples(n):         #n is the number of columns that will be made
    '''Prints a line of multiples of factor 'n'.'''
    for x in range(1, n+1):     #prints n  2n  3n ... until x = n+1
        print(n * x, end='\t')  #(since x starts counting at 0, 
    print()                     #n*n will be the final entry)


def print_mult_table(n):            #n is the final factor
    '''Makes a table from a factor 'n' via print_multiples().
    '''
    for i in range(1, n+1):         #call function to print rows with i
        print_multiples(i)          #as the multiplier.

これは私のものです。基本的なコメントは、トレースを頭の中でまっすぐに保つためのものでした。私の関数は私にとってより理にかなっていますが、いくつかの違いがあるかもしれません. なぜ本が print_multiples() の引数を 2 つにすることにしたのか、よくわかりません。私には 1 つで十分だと思われるからです。また、変数のほとんどを変更しました。対グローバル。ただし、どちらの場合も最終的な数値は同じになるため、n を再利用しました。

この種のことを行うためのより効率的な方法があるかもしれませんが、私はまだ反復中です。何が機能し、何が機能しないかを感じようとすることを望んでいるだけで、これは私を悩ませています。

4

1 に答える 1

1

(注: そうです、あなたは Python 3.x を実行しています)
あなたのコードはより単純で、私にとってもより理にかなっています。
彼らのものは正しいですが、その意図はまったく同じではないため、その出力は異なります.
両方の出力を注意深く比較し、違いのパターンに気付くかどうかを確認してください。

あなたのコードはわずかに「効率的」ですが、画面への印刷には(比較的)長い時間がかかり、プログラムはそれらのものよりもわずかに少なく印刷されます。

効率を測定するには、Python でコードを「プロファイリング」して、処理にかかる時間を確認します。以下は、 a)
ソース テキストと出力の違いを調べるために実行したコード
です。b) コードをプロファイリングして、どちらが高速かを確認します。
実行してみるとよいでしょう。幸運を!

import cProfile

def print_multiples0(n, high):         #This is the e-book version
    for i in range(1, high+1):
        print(n * i, end='   ')
    print()

def print_mult_table0(high):
    for i in range(1, high+1):
        print_multiples0(i, i+1)       #They changed high+1 to i+1 to halve output

def print_multiples1(n):        #n is the number of columns that will be made
    '''Prints a line of multiples of factor 'n'.'''
    for x in range(1, n+1):     #prints n  2n  3n ... until x = n+1
        print(n * x, end='\t')  #(since x starts counting at 0,
    print()                     #n*n will be the final entry)

def print_mult_table1(n):            #n is the final factor
    '''Makes a table from a factor 'n' via print_multiples().
    '''
    for i in range(1, n+1):          #call function to print rows with i
        print_multiples1(i)          #as the multiplier.

def test( ) :
     print_mult_table0( 10)
     print_mult_table1( 10)

cProfile.run( 'test()')
于 2012-05-03T04:09:56.323 に答える