我究竟做错了什么?添加1以使用输入

时间:2012-07-04 19:54:27

标签: python

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

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 个答案:

答案 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: '))