遇到这个问题有些困难。程序应该从用户那里得到一个号码。它将是三角形的数量。第一个三角形应该有两行。每个新三角形将比最后一个三角形多一行。 这就是我所拥有的:
numTri = input('Please umber of triangles: ')
numTri = eval(numTri)
numRow = 2
x = 0
while j<numTri:
y = '*'
z = 0
while z<numRow:
print y
y = y + *
z += 1
x += 1
numRow += 1
在打印行上出现无效的语法错误。不确定我是否做错了什么。有人有任何想法吗?
答案 0 :(得分:6)
假设您使用的是Python 3,则代码中会出现很多错误。让我们看看他们:
j
变量
您在循环条件中使用j
变量,该变量未设置,也未在任何地方使用。这将导致错误:
while j<numTri:
我相信你想使用x
变量:
while x<numTri:
print()
是一个功能
在Python 3中,您应该在括号之间放置print()
函数的参数,但情况并非如此:
print y
太容易解决:
print(y)
请注意,在Python 2中,括号是可选的。
'*'
字符没有引号:
您尝试将'*'
char附加到y
的字符串中,但不会用引号括起char:
y = y + *
解释器会将此星号视为乘法运算符,这将产生错误。只需用引号括起来(单引号或双引号,无关紧要):
y = y + '*'
缩进问题
代码中一个特别有害的问题是,在第二个while
循环之后,您的代码不会返回到循环的相同缩进级别。我用open boxes替换了下面的空格,以便我们可以计算它们:
␣␣␣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
答案 1 :(得分:1)
但我认为语法错误(因而回答你的问题)是因为你使用的是Python 3,其中print
需要圆括号。所以:
print ( y )
如果您只想获得编程任务的最高分:
print('\n'.join('*'*y for x in range(int(input('Please umber of triangles: '))) for y in range(1,x+3)))
答案 2 :(得分:1)
j
循环之前,永远不会定义 while
。也许你的意思是while x < numTri:
?
另外,
x = 0
while x < numTri:
# do something
x += 1
构造不是非常Pythonic;尝试
for x in range(numTri):
# do something
代替。
答案 3 :(得分:0)
numTri = int(raw_input('Please umber of triangles: '))
或在python 3.x上
numTri = int(input('Please umber of triangles: '))