检查三角形代码,python
我想知道哪里出了问题。 假设我想获得:检查三角形代码,python,python,Python,我想知道哪里出了问题。 假设我想获得: print(triangle(5)) * * * * * * * * * 我的代码: def triangle(n): result = "" for i in range(n): if (i+1) % 2 == 1: result = result + "*\n" if (i+1) % 2 == 0: result = " " + result
print(triangle(5))
*
*
* *
* *
* * *
我的代码:
def triangle(n):
result = ""
for i in range(n):
if (i+1) % 2 == 1:
result = result + "*\n"
if (i+1) % 2 == 0:
result = " " + result
return result
它只给了我
*
*
(答案如下,但我想知道我自己的代码出了什么问题)
当您使用
n==5
通过原始for
循环运行时,请考虑result
i result
- ------
0 "*\n"
1 " *\n"
2 " *\n*\n"
3 " *\n*\n"
4 " *\n*\n*\n"
当print
ed时,它是:
*
*
*
根据i
是奇数还是偶数(实际上,i+1
是奇数还是偶数,这似乎不必要地复杂),您可以在开头添加一个空格,或者在结尾添加一个星号和换行符。这就是你的代码所做的
一个更好的问题可能是:为什么您希望第一个代码能够工作?当您使用
n==5
运行时,通过原始的for
循环来考虑结果
i result
- ------
0 "*\n"
1 " *\n"
2 " *\n*\n"
3 " *\n*\n"
4 " *\n*\n*\n"
当print
ed时,它是:
*
*
*
根据i
是奇数还是偶数(实际上,i+1
是奇数还是偶数,这似乎不必要地复杂),您可以在开头添加一个空格,或者在结尾添加一个星号和换行符。这就是你的代码所做的
一个更好的问题可能是:为什么您希望第一个代码能够工作?当您使用n==5
运行时,通过原始的for
循环来考虑结果
i result
- ------
0 "*\n"
1 " *\n"
2 " *\n*\n"
3 " *\n*\n"
4 " *\n*\n*\n"
当print
ed时,它是:
*
*
*
根据i
是奇数还是偶数(实际上,i+1
是奇数还是偶数,这似乎不必要地复杂),您可以在开头添加一个空格,或者在结尾添加一个星号和换行符。这就是你的代码所做的
一个更好的问题可能是:为什么您希望第一个代码能够工作?当您使用n==5
运行时,通过原始的for
循环来考虑结果
i result
- ------
0 "*\n"
1 " *\n"
2 " *\n*\n"
3 " *\n*\n"
4 " *\n*\n*\n"
当print
ed时,它是:
*
*
*
根据i
是奇数还是偶数(实际上,i+1
是奇数还是偶数,这似乎不必要地复杂),您可以在开头添加一个空格,或者在结尾添加一个星号和换行符。这就是你的代码所做的
一个更好的问题可能是:为什么您希望第一个代码能够工作?要解决这个问题
- 行
result=result+“*\n”
每行只会添加一颗星。如果将其与模型答案进行比较,它会将'*'
乘以(n/2)
,这会打印出相当于n
一半的星号,然后附加一个“\n”
以插入新行
- 在另一种情况下,看起来您正在尝试添加前一行,但随后将其缩进。然而,实际上你要做的是用一个缩进重新绘制整个三角形。因此,对于循环的前几次迭代,您只是在打印空格(请参阅第一次
*
之前的两个空格)。这需要更改以使用n
打印正确数量的*
模型应答本身使用递归调用来委托打印其他行,这意味着三角形函数的批量可以集中打印一行。要将其放入迭代函数(如您的函数)中,其工作原理如下:
def triangle(n):
if n == 0:
return ""
result = ""
for i in range(1, n + 1):
if i % 2 != 0:
result += (i / 2) * "* "
result += "*"
else:
result += (i / 2) * " *"
result += "\n"
return result
要打破这个
- 行
result=result+“*\n”
每行只会添加一颗星。如果将其与模型答案进行比较,它会将'*'
乘以(n/2)
,这会打印出相当于n
一半的星号,然后附加一个“\n”
以插入新行
- 在另一种情况下,看起来您正在尝试添加前一行,但随后将其缩进。然而,实际上你要做的是用一个缩进重新绘制整个三角形。因此,对于循环的前几次迭代,您只是在打印空格(请参阅第一次
*
之前的两个空格)。这需要更改以使用n
打印正确数量的*
模型应答本身使用递归调用来委托打印其他行,这意味着三角形函数的批量可以集中打印一行。要将其放入迭代函数(如您的函数)中,其工作原理如下:
def triangle(n):
if n == 0:
return ""
result = ""
for i in range(1, n + 1):
if i % 2 != 0:
result += (i / 2) * "* "
result += "*"
else:
result += (i / 2) * " *"
result += "\n"
return result
要打破这个
- 行
result=result+“*\n”
每行只会添加一颗星。如果将其与模型答案进行比较,它会将'*'
乘以(n/2)
,这会打印出相当于n
一半的星号,然后附加一个“\n”
以插入新行
- 在另一种情况下,看起来您正在尝试添加前一行,但随后将其缩进。然而,实际上你要做的是用一个缩进重新绘制整个三角形。因此,对于循环的前几次迭代,您只是在打印空格(请参阅第一次
*
之前的两个空格)。这需要更改以使用n
打印正确数量的*
模型应答本身使用递归调用来委托打印其他行,这意味着三角形函数的批量可以集中打印一行。要将其放入迭代函数(如您的函数)中,其工作原理如下:
def triangle(n):
if n == 0:
return ""
result = ""
for i in range(1, n + 1):
if i % 2 != 0:
result += (i / 2) * "* "
result += "*"
else:
result += (i / 2) * " *"
result += "\n"
return result
要打破这个
- 行
result=result+“*\n”
每行只会添加一颗星。如果将其与模型答案进行比较,它会将'*'
乘以(n/2)
,这会打印出相当于n
一半的星号,然后附加一个“\n”
以插入新行
- 在另一种情况下,看起来您正在尝试添加前一行,但随后将其缩进。然而,实际上你要做的是用一个缩进重新绘制整个三角形。所以发生的是t的前几个迭代