2

loops を含む Python 101 タイプの問題で立ち往生しています。道順は次のとおりです。

平方数は、K × K の形式の整数です。たとえば、3 × 3 = 9 であるため、9 は平方数です。入力から整数 n を読み取り、n 未満のすべての正の平方数を 1 行に 1 つずつ出力するプログラムを作成します。昇順に。たとえば、入力が 16 の場合、正しい出力は次のようになります。

1
4
9

これは私がこれまでに持っているものですが、ある程度は機能しますが、永遠に実行されます。私のコードは if ステートメントに到達しないため、17 になる前に中断 (停止) します。

n = 17 とします。

n=int(input())
counter = 1
while counter * counter < n:
   for counter in range(1,n):
      a = counter*counter
      print(a)
   if a < n:
      break

結果:

1
4
9
16
25
36
49
64
81
4

6 に答える 6

3

ここにコードの修正があります。

n=int(input())
counter = 1
for counter in range(1,n):
    a = counter*counter
    if a >= n:
        break
    print(a)

あなたのコードには 3 つの問題がありました。まず、ブレークしたい条件はa >= nnota < nです。次に、数値を印刷する前にその条件をテストする必要があります。したがって、ステートメントはループif内で、ステートメントの前にある必要があります。第三に、外側のループは実際には必要ありません:)追加することはできますが、単純な内側のループで十分です。forprintwhilefor

于 2013-09-01T02:42:24.527 に答える
1

if a < n:次の場合を除き、決して成功しませんn = 2。ループの内側はforよりも大きくaなっているからです。それが無限ループの理由です。これを試して:(n-1)*(n-1)nn > 2

>>> counter = 1
>>> n = 16 # int(input())
>>> r = counter**2
>>> while r<n:
    print r
    counter += 1
    r = counter**2


1
4
9

または、外側のループを削除し、次のように for ループに条件を配置して、自分のものを変更します。

for counter in range(1,n):
      a = counter*counter
      if a >= n:break
      print(a)
于 2013-09-01T02:29:57.247 に答える
0

ここには 3 つの問題がありますが、おわかりのように、正しい方向に進んでいます。

  1. whileまず、ループを 1 つだけ使用する必要があるときに 2 つのループを使用しています。これは、ループがどのように機能するかについて少し不明確だからだと思います。ループは、while実行するたびに条件が真であることを確認します。ループの実行中に条件が false になった場合でも、ループは終了しますが、別のループは開始されません。例えば:

    n = 17
    while n < 18:
        n += 1
        print n
        n += 1
        print n
    

    プリント:

    18
    19
    

    あなたの場合、ループを反復するたびにwhileループが作成されforます。を 1 回反復するためにwhile、コンピューターは から までのすべての数値を処理1するn必要があります。つまり、while ループが 2 回目のチェックを行う前に、余分な数値をすべて出力します。これを修正する最も簡単な方法は、whileループを削除し、コードの構造を少し変えることです。数行で説明しますが、実際には必要ありません。

  2. と言うとif a < n:、符号が逆になり、等号が必要になります。この問題では、すべての値を未満にするよう求められますがn、 がないと、プログラムはより大きくなる=まで停止しません。である必要があります。nif a >= n:

  3. 最後に、操作の順序は、あなたが望むものではありません。a印刷前よりも少ないことを確認したいのnですが、その確認を行う前に印刷します。それらを切り替えると、次のようになります。

    n=int(input())
    for counter in range(1,n):
        a = counter*counter
        if a >= n:
            break
        print(a)
    

    これでうまくいくはずです。

于 2013-09-01T03:06:08.133 に答える
0

どうですか

    n= int(input())
    counter= 1
    while counter * counter < n:
        print( counter * counter )
        counter+= 1

?

于 2013-09-01T02:29:11.607 に答える
0

タートルマンは完璧でしたが、私にとっては. 私は 100 まで到達できるようにする必要があったので、81 を超える必要がある場合はこれを実行してください

n = int(input())

counter = 1

for counter in range(1,n + 1):
    
    a = counter*counter
    
    if a > n:
        
break
    
print(a)
于 2020-09-28T22:45:55.163 に答える