0

遇到这个问题有些困难。程序应该从用户那里得到一个号码。这将是三角形的数量。第一个三角形应该有两行。每个新三角形将比上一个三角形多出一行。这就是我所拥有的:

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

在打印行上出现无效的语法错误。不知道我是否做错了什么。有人知道吗?

4

4 回答 4

6

假设您使用的是 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
于 2012-07-04T20:18:01.950 回答
1

但我认为语法错误(从而回答您的问题)是因为您使用的是print需要圆括号的 Python 3。所以 :

print ( y )

如果您只想为您的编程任务获得最高成绩:

print('\n'.join('*'*y for x in range(int(input('Please umber of triangles: '))) for y in range(1,x+3)))
于 2012-07-04T19:58:22.090 回答
1

jwhile在到达循环之前从未定义过。也许你的意思是while x < numTri:相反?

此外,该

x = 0
while x < numTri:
    # do something
    x += 1

构造不是很Pythonic;尝试

for x in range(numTri):
    # do something

反而。

于 2012-07-04T20:00:01.803 回答
0
numTri = int(raw_input('Please umber of triangles: '))

或在 python 3.x 上

numTri = int(input('Please umber of triangles: '))
于 2012-07-04T19:55:16.827 回答