-2

whileループを使用して、正の整数を入力として受け取り、入力番号までのすべての整数の乗算を示す乗算表を出力するプロシージャを作成しました。方程式が印刷される順序は重要です。

たとえば、print_multiplication_table(2)は次のようになります
。1* 1
1 * 2
2 * 1
2 * 2

これは私のコードです:

def print_multiplication_table(n):
    a = 1
    b = 1
    while a <= n:
        while b <= n:
            print str(a) + " * " + str(b)
            b = b + 1
        a = a + 1

ただし、これは印刷されるだけなので機能しないようです

1 * 1
1 * 2

誰かが理由を知っていますか?ありがとう!

4

3 に答える 3

5

実行する前に、内部ループのカウンターを初期化する必要があります

def print_multiplication_table(n):
    a = 1
    b = 1 # won't do harm, but doesn't really need now
    while a <= n:
        b = 1 # <-- note
        while b <= n:
            print str(a) + " * " + str(b)
            b = b + 1
        a = a + 1
于 2012-08-11T01:21:29.123 に答える
3

forの代わりに使用することを検討してくださいwhile:

def print_multiplication_table(n):
    for a in range(1, n+1):
        for b in range(1, n+1):
            print str(a) + " * " + str(b)

これは次を与えます:

1 * 1
1 * 2
2 * 1
2 * 2

を使用forすると、カウンター変数が自動的に追跡され、発生したエラーの種類が回避されます (もちろん、これはfor-loops でエラーを作成できないという意味ではありませんが、発生したエラーの種類を回避する方が簡単です)。

于 2012-08-11T01:23:16.133 に答える
3

Python の理解を使用すると、さらに簡単になります。

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6))
1 * 1
1 * 2
1 * 3
1 * 4
1 * 5
2 * 1
# etc...

または、端末の改行が必要な場合:

>>> gen=('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6))
>>> print '\n'.join(gen),'\n'

コンマを使用した印刷についてより明確にするために、別の gen 式を使用しました。これも機能します:

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6)),'\n'

strコードでを明示的に呼び出す理由はありません。そうでない場合でも、 a と b を整数として使用できます。

>>> gen=('{} * {} = {:2}'.format(a,b,a*b) for a in range(1,3) for b in range(1,4))
>>> print '\n'.join(gen),'\n'
1 * 1 =  1
1 * 2 =  2
1 * 3 =  3
2 * 1 =  2
2 * 2 =  4
2 * 3 =  6 
于 2012-08-11T01:29:36.520 に答える