0
#/usr/bin/python2.4 -tt

import sys

def mult_table(x,y):
  for i in range(1,y+1):
    for n in range(1,x+1):
      if n == 1:
        print i*n,
      elif n == x:
        print repr(i*n).rjust(3)
      else:
        print repr(i*n).rjust(3),

mult_table(12,3)
sys.exit(0)

このショートプログラムをCodeEvalに提出しました。その唯一の仕事は九九を作ることです。問題は、末尾に空白がないことです。送信したとき、最後の行には36の後に空白があります。自分でテストしましたが、この問題はありません。何が起こっている?

4

5 に答える 5

1

あなたのコードは、notforのスペースを追加しmult_table(1,1)ますmult_table(12,3)

したがって、ケースを修正する必要がありますif n == 1(コードの後半で行うように、もチェックn == xします)。

私はこれを少し違ったやり方で行うので、の中心mult_tableは次のようになります。

      if n == 1:
        print i*n,
      else:
        print repr(i*n).rjust(3),

そしてprint、外側のforループの改行だけです。

持ち帰り:境界条件をテストしてください!:-)

于 2012-08-14T03:43:18.730 に答える
0

改行自体が空白であるという点で、プログラムの設計上、末尾に空白があります。特別な場合を作成したい場合は、テーブルの最後に改行を書き込むことを禁止できます。

プログラムをテストしたところ、最後の値の後にスペース(ASCII 0x20)が表示されませんでした。

$ ~/src/test/x.py | xxd
0000000: 3120 2020 3220 2020 3320 2020 3420 2020  1   2   3   4
0000010: 3520 2020 3620 2020 3720 2020 3820 2020  5   6   7   8
0000020: 3920 2031 3020 2031 3120 2031 320a 3220  9  10  11  12.2
0000030: 2020 3420 2020 3620 2020 3820 2031 3020    4   6   8  10
0000040: 2031 3220 2031 3420 2031 3620 2031 3820   12  14  16  18
0000050: 2032 3020 2032 3220 2032 340a 3320 2020   20  22  24.3
0000060: 3620 2020 3920 2031 3220 2031 3520 2031  6   9  12  15  1
0000070: 3820 2032 3120 2032 3420 2032 3720 2033  8  21  24  27  3
0000080: 3020 2033 3320 2033 360a                 0  33  36.
于 2012-08-14T03:22:20.260 に答える
0

これを実行(ファイルへの出力)しましたが、結果のファイルに余分な空白は見つかりませんでした

import sys

def mult_table(x,y):
    with open('data.txt', 'w') as f:
        for i in range(1,y+1):
            for n in range(1,x+1):
                if n == 1:
                    print i*n,
                    print >> f,  i*n,
                elif n == x:
                    print repr(i*n).rjust(3)
                    print >> f, repr(i*n).rjust(3)
                else:
                    print repr(i*n).rjust(3),
                    print >> f, repr(i*n).rjust(3),

mult_table(12,3)
sys.exit(0)

36の後に-改行があり0aますが、私はそれが正常だと思います、それはあなたの場合に問題と見なされますか?

于 2012-08-14T03:43:41.080 に答える
0

ある環境で結果を生成し、別の環境で表示すると、問題が発生する可能性があります。

0000000: 3120 2020 3220 2020 3320 2020 3420 2020  1   2   3   4
0000010: 3520 2020 3620 2020 3720 2020 3820 2020  5   6   7   8
0000020: 3920 2031 3020 2031 3120 2031 320D 0A32  9  10  11  12..2
0000030: 2020 2034 2020 2036 2020 2038 2020 3130     4   6   8  10
0000040: 2020 3132 2020 3134 2020 3136 2020 3138    12  14  16  18
0000050: 2020 3230 2020 3232 2020 3234 0D0A 3320    20  22  24..3
0000060: 2020 3620 2020 3920 2031 3220 2031 3520    6   9  12  15
0000070: 2031 3820 2032 3120 2032 3420 2032 3720   18  21  24  27
0000080: 2033 3020 2033 3320 2033 360D 0A          30  33  36..

ファイルへの標準出力を使用してコードを実行しているWindows7システムの出力に0D0A(CRLF)があります。たぶん、これはあなたの場合は空白として解釈されますか?

コードがどのように実行され、どのように結果を出力するか、またどの形式で出力するかを明確にする必要がある場合があります。

于 2012-08-14T04:16:50.363 に答える
0

さて、あなたのプログラムが空のスペースを放出するケースを見つけたので、私は私の前の答えが好きです。

ただし、CodeEvalで問題を確認したところ、12x3ではなく12x12のテーブルを印刷する必要があることがわかりました。

チャレンジの説明では、正しい出力の最初の3行のみが示されます。

ここで、プログラム出力が何であるかについてのCodeEvalのレポートを調べると、はい、余分なスペースがあります。(私はそれを試してみました)。しかし、それはCodeEvalのバグであり、あなたのバグではありません。あなたのプログラムはそれを発しませんでした。

赤ニシンのスープは誰ですか?

持ち帰り:質問を注意深く読んでください。:-)

于 2012-08-14T11:43:20.153 に答える