假设您使用的是 Python 3,那么您的代码中有很多错误。让我们看看它们:
主要问题
j
变量_
您j
在循环条件中使用了一个变量,该变量未设置,也未在任何地方使用。这将导致错误:
while j<numTri:
我相信您想使用该x
变量:
while x<numTri:
print()
是一个函数
在 Python 3 中,您应该将print()
函数的参数放在括号之间,但情况并非如此:
print y
太容易解决了:
print(y)
请注意,括号在 Python 2 中是可选的。
'*'
不带引号的字符:
您尝试将'*'
char 附加到字符串 fromy
但不使用引号将 char 括起来:
y = y + *
解释器会将此星号视为乘法运算符,这将产生错误。只需用引号将其括起来(单引号或双引号,都没有关系):
y = y + '*'
缩进问题
您的代码中一个特别有害的问题是,在第二个while
循环之后,您的代码不会返回到循环的相同缩进级别。我用打开的盒子替换了下面的空格,以便我们计算它们:
␣␣␣while z<numRow:
␣␣␣␣␣␣␣␣␣print y
␣␣␣␣␣␣␣␣␣y = y + *
␣␣␣␣␣␣␣␣␣z += 1
␣␣␣␣x += 1
␣␣␣␣numRow += 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)
非标准压痕
有时,您将循环内的内容缩进四个空格:
␣␣␣y = '*'
␣␣␣z = 0
␣␣␣while z<numRow:
然后有六个空格
␣␣␣␣␣␣print(y)
␣␣␣␣␣␣y = y + '*'
␣␣␣␣␣␣z += 1
甚至有四个空格,这会导致错误:
␣␣␣␣x += 1
␣␣␣␣numRow += 1
最好的办法是始终使用相同的缩进尺寸。PEP 8(针对所有 Python 程序员的一组建议)建议每个缩进使用四个空格:
␣␣␣␣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