3

これはCS101 タイプの Python クラス用です。

この問題は、プログラマーに、このパターンを設定する for ループを作成するように要求します。

111
11
1

ここに生成するサンプルコードがあります

11111
11111
11111
11111
11111

for i in range(0, 5):
  X = 0
  for j in range(0, 5):
    X = (X*10)+1
  print(X)

これが私の試みの1つです。明らかにうまくいきません。助けてください!

n=int(input())
for i in range(0, n):
  X = 0
  for j in range(0, n):
    X = (X*10)+1
    i=(n-2)
  print(X)

ループのみを使用して答えを説明してみてください。関数にはまだ行っていません。私はこのスタックオーバーフローの答えを持っていますが、関数として書かれています。

4

7 に答える 7

5

n to 1、逆方向 (この場合は 3,2,1) のループを使用できます。

n = 3
c = "1"

for i in range(n, 0, -1):
    print(c * i)

またはwhileループでも同じ:

n = 3
c = "1"

i = n
while i != 0:
    print(c * i)
    i -= 1

両方のスニペットが出力されます:

111
11
1

は文字列であるため、3 ではなく「111」が表示されcます。Python には、私が「文字列繁殖」と呼ぶ魔法の機能がありnますn

>>> s = "1"
>>> type(s)
<type 'str'>
>>> s * 2
'11'
>>> s * 10
'1111111111'

-1範囲内関数呼び出しはstep引数の値です。step が負の場合、ループは範囲の最後から最初まで逆方向に進みます。

>>> range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10, 0, -1)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

注: Python 2 を使用している場合は、 に置き換えrangeてください。xrange

うまく説明できたことを願っています。

UPD: 簡易版:

n = 3

while n != 0:
    number = 0
    for i in range(n):
        number += 10 ** i

    print number
    n -= 1
于 2013-08-31T21:14:56.593 に答える
1

i最大長から現在のインデックスを差し引いて、11 行にいくつの s を含める必要があるかを知ることができます。

for i in range(n):
    X = 0
    for j in range(n-i):
        X = X * 10 + 1
    print X
于 2013-08-31T21:20:40.687 に答える
0

整数を使用したアプローチを使用できます。必要なのは、3 (または何でも) から始まり、1 までカウントダウンする長さ変数だけです。範囲を使用するための for ループは次のとおりです。

for length in range(3,0,-1):
    X = 0
    for j in range(length):
        X = 10*X + 1
    print (X)

range() の 3 番目の引数は、停止値に到達するか通過するまで、新しい値を生成するために前の値に追加される増分値です。これはデフォルトで 1 ですが、他の値を使用して 2 でカウントしたり、逆方向にカウントしたりできます。

range(length) は range(0, length) と同じであることに注意してください。

i=(n-2) の代入であなたが何をしようとしているのか、たった今わかりました。これは、for ループ変数を変更して反復回数を変更できる C のような言語ではありません。ループの数と値のセットは、ループの最初の繰り返しの前に完全に決定され、ループ内でそれを変更することはできません。できることは、break または return ステートメントでループを早期に終了することだけです。

範囲を使用したループの感触をつかむには、Idle または Python インタラクティブ モードを起動し、いくつかの range() 値を出力します。

于 2013-08-31T21:23:14.533 に答える
0

n=int(input()) for i in range(0, n): X = 0 for j in range(0, ni): X = (X*10)+1 print(X)

于 2016-04-08T22:17:43.517 に答える
0

Python にもwhileループがあります。

n = int(input())
while n > 0:
  X = 0
  for j in range(0, n):
    X = (X*10) + 1
    i = n - 2
  print(X)
  n -= 1

出力例 (n=5 の場合):

11111
1111
111
11
1
于 2013-08-31T21:52:15.260 に答える
0

この回答では、while ループで変更されたリストを使用し、連結を回避する str.join() メソッドを使用しています。

n = 5
l = ['1'] * n

while l:
    print(''.join(l))
    l.pop()

ここで魔法を説明すると、リストlにはn「1」文字列が含まれます。ループwhile lすると、リストが "Falsy" (空) になるまでループし続けます。''.join(l)リスト内のすべての文字列を取得lして結合し、''それらの間に文字列 (空) を挿入します。次に、l.pop()リストから最後の項目を削除します (必要に応じてそれを返します)。

于 2013-08-31T21:27:16.803 に答える
0

最も簡単な解決策 (そしておそらくあなたの先生が得ていること) は、pythons builtins を使用して作業を行うことだと思います。

for number in reversed(range(10)):
    print number*"1"

説明

range(n) - 0 から n 未満の数のシーケンスを作成します。

例: range(n) -> [0, 1, 2, ..., n-1]

reversed() - 渡したものを反転します。

例: reversed([1, 2, 3]) -> [3, 2, 1]

Python は、int に文字列を掛けることを "repeat me" として扱います。そのため、range を使用して各行に必要な繰り返し回数を生成し、reverse を使用してフリップして、ピラミッドが大きくなってから縮小するようにします。

「1」の最初の行の幅よりも 1 大きい n を選択することを忘れないでください。

于 2013-08-31T22:05:56.580 に答える