Python 3 を使用していると仮定すると、コードには多くのエラーがあります。それらを見てみましょう:
主な問題
j
変数_
j
ループ条件で、設定も使用もされていない変数を使用します。これにより、エラーが発生します。
while j<numTri:
x
変数を使用したいと思います:
while x<numTri:
print()
関数です
Python 3 では、print()
関数のパラメーターを括弧で囲む必要がありますが、そうではありません。
print y
解決するのが簡単すぎる:
print(y)
Python 2 では括弧はオプションであることに注意してください。
'*'
引用符なしの文字:
'*'
char を文字列 fromに追加しようとしましy
たが、char を引用符で囲みませんでした:
y = y + *
インタープリターは、このアスタリスクを乗算演算子として認識し、エラーが発生します。引用符で囲みます (一重か二重かは関係ありません)。
y = y + '*'
インデントの問題
コードの特に有害な問題は、2 番目のwhile
ループの後、コードがループの同じインデント レベルに戻らないことです。以下のスペースを開いているボックスに置き換えて、それらを数えられるようにしました。
␣␣␣while z<numRow:
␣␣␣␣␣␣␣␣␣print y
␣␣␣␣␣␣␣␣␣y = y + *
␣␣␣␣␣␣␣␣␣z += 1
␣␣␣␣x += 1
␣␣␣␣numRow += 1
残念ながら、行と比較すると、最後の 2 行には 1 つ多くのスペースがありwhile
ます。これらの偽のスペースを削除する必要があります。
結果のコードは次のようになります。
numTri = input('Please umber of triangles: ')
numTri = eval(numTri)
numRow = 2
x = 0
while x<numTri:
y = '*'
z = 0
while z<numRow:
print(y)
y = y + '*'
z += 1
x += 1
numRow += 1
マイナーな問題
コードには、悪い習慣と見なされるその他の詳細もあります。あなたは本当に初心者なので、それらはまだあまり重要ではありませんが、それらのいくつかを探ることができます.
避けるeval()
eval()
は強力ですが危険な機能であるため、使用を避けています。int()
問題なく読み取り文字列を整数に変換するため、あなたの場合は特に簡単です。
numTri = input('Please umber of triangles: ')
numTri = int(numTri)
非標準のインデント
場合によっては、ループ内にあるものを 4 つのスペースでインデントします。
␣␣␣y = '*'
␣␣␣z = 0
␣␣␣while z<numRow:
次に6つのスペースで
␣␣␣␣␣␣print(y)
␣␣␣␣␣␣y = y + '*'
␣␣␣␣␣␣z += 1
4 つのスペースがある場合でも、エラーが発生します。
␣␣␣␣x += 1
␣␣␣␣numRow += 1
最善の方法は、常に同じインデント サイズを使用することです。PEP 8 (すべての Python プログラマ向けの一連の推奨事項) では、各インデントに 4 つのスペースを使用することを推奨しています。
␣␣␣␣y = '*'
␣␣␣␣z = 0
␣␣␣␣while z<numRow:
␣␣␣␣print(y)
␣␣␣␣y = y + '*'
␣␣␣␣z += 1
␣␣␣␣x += 1
␣␣␣␣numRow += 1
while
それ以外のfor
これは初心者にとっては難しいことですが、それにもかかわらず、指摘することは役立つかもしれません. 関数for
でループを使用すると、コードははるかに優れたものになります。range()
for x in range(0, numTri+1):
y = '*'
for z in range(0, numRow+1):
print(y)
y = y + '*'
numRow += 1
ただし、あなたは学生なので、この機能については将来学習することになると思いますので、安心してください :)
結果のコード:
numTri = input('Please umber of triangles: ')
numTri = int(numTri)
numRow = 2
for x in range(0, numTri+1):
y = '*'
for z in range(0, numRow+1):
print(y)
y = y + '*'
numRow += 1