Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python打印此动态模式?_Python_Python 3.x_Printing - Fatal编程技术网

如何使用Python打印此动态模式?

如何使用Python打印此动态模式?,python,python-3.x,printing,Python,Python 3.x,Printing,要求用户输入一个大于或等于5(>=5)的“奇数”,并编写一段代码,用星号显示一个正方形,该正方形被分成四个三角形 请参见下面的示例以了解模式的行为: 例如,对于数字5,模式为: ***** ** ** * * * ** ** ***** ********* ** ** * * * * * * * * * * * * * * * * * * * ** ** ********* 例如,对于数字9,模式为: ***** ** ** * * * ** ** *

要求用户输入一个大于或等于5(>=5)的“奇数”,并编写一段代码,用星号显示一个正方形,该正方形被分成四个三角形

请参见下面的示例以了解模式的行为: 例如,对于数字5,模式为:

*****
** **
* * *
** **
*****
*********
**     **
* *   * *
*  * *  *
*   *   *
*  * *  *
* *   * *
**     **
*********
例如,对于数字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:并删除
中断
,则将其替换为
会更干净。