如何使用Python打印此动态模式?
要求用户输入一个大于或等于5(>=5)的“奇数”,并编写一段代码,用星号显示一个正方形,该正方形被分成四个三角形 请参见下面的示例以了解模式的行为: 例如,对于数字5,模式为:如何使用Python打印此动态模式?,python,python-3.x,printing,Python,Python 3.x,Printing,要求用户输入一个大于或等于5(>=5)的“奇数”,并编写一段代码,用星号显示一个正方形,该正方形被分成四个三角形 请参见下面的示例以了解模式的行为: 例如,对于数字5,模式为: ***** ** ** * * * ** ** ***** ********* ** ** * * * * * * * * * * * * * * * * * * * ** ** ********* 例如,对于数字9,模式为: ***** ** ** * * * ** ** *
*****
** **
* * *
** **
*****
*********
** **
* * * *
* * * *
* * *
* * * *
* * * *
** **
*********
例如,对于数字9,模式为:
*****
** **
* * *
** **
*****
*********
** **
* * * *
* * * *
* * *
* * * *
* * * *
** **
*********
我尝试了许多代码组合,但都没有成功。我使用的是Python 3.7.3版本
n = int(input("Please enter an odd number greater than or equal to 5: "))
while(n < 5 or n%2==0):
print("Invalid")
break
else:
for a in range(n):
if(a==0 or a==n-1):
print("*"*n,end='')
else:
i=1
j=n-1
for row in range(n-1):
for col in range(n-1):
if(row==i and col==j):
print("*",end="")
i=i+1
j=j-1
elif row==col:
print("*",end="")
else:
print(end="")
print()
n=int(输入(“请输入大于或等于5的奇数:”)
而(n<5或n%2==0):
打印(“无效”)
打破
其他:
对于范围(n)内的a:
如果(a==0或a==n-1):
打印(“*”*n,结束=”)
其他:
i=1
j=n-1
对于范围(n-1)中的行:
对于范围(n-1)中的列:
如果(行==i,列==j):
打印(“*”,end=“”)
i=i+1
j=j-1
elif行==列:
打印(“*”,end=“”)
其他:
打印(end=”“)
打印()
很明显,我在这里做错了什么,没有得到想要的输出,你可以这样做:
n = int(input("Please enter an odd number greater than or equal to 5: "))
while(n < 5 or n%2==0):
print("Invalid")
n = int(input("Please enter an odd number greater than or equal to 5: "))
x = ['*'*n] + ['*'+' '*i+'*'+' '*(n-4-i*2)+'*'+' '*i+'*' for i in range(int((n-3)/2))]
print('\n'.join(x + ['*'+' '*int((n-3)/2)+'*'+' '*int((n-3)/2)+'*'] + x[::-1]))
n=int(输入(“请输入大于或等于5的奇数:”)
而(n<5或n%2==0):
打印(“无效”)
n=int(输入(“请输入大于或等于5的奇数:”)
x=['*'*n]+['*'+''''*i+'*'+'''*.*(n-4-i*2)+'*'+''+'''*i+'*'表示范围内的i(int((n-3)/2))]
打印('\n'.join(x+['*'+'*int((n-3)/2)+'*'+'*int((n-3)/2)+'*']+x[:-1]))
在编写代码之前,这样的问题更容易在纸上解决。停下来,寻找行为模式,然后它就会变得更加清晰。你可能的复制品做得相当好。两个提示:a)不要触摸i
和j
,让循环负责更改它们。b) 仅仅打印星号是没有帮助的,你还需要一些空格print(end=“”)
没有任何用处。您必须打印空格才能将*
移动到正确的位置。此外,虽然开始时的“while”构造确实有效,但如果n<5或n%2==0:并删除中断
,则将其替换为会更干净。