尝试在python中打印框架'*'和对角线

问题描述 投票:-1回答:1

我尝试在框架和对角线上打印'*'。

这就是我做的:

x=10
y=10
def print_frame(n, m, c):
  print c * m
  for i in range(1, n - 1):
    print c ,' '*(n-2-i),c, ' '*i , c  , c
  print c * m

print_frame(10, 10, '*')

这是结果:

**********
*         *   * *
*        *    * *
*       *     * *
*      *      * *
*     *       * *
*    *        * *
*   *         * *
*  *          * *
**********
python printing frame
1个回答
0
投票

正如我在评论中指出的那样,只有方形矩阵具有对角线。但即使对于那些人来说,事情也比他们看起来“有点”复杂:

  • 我可以在一个循环中完成它,但我认为最好看到所有“部分”
  • 还添加了递归变体(未使用)。我更喜欢这个,因为它更清楚,特别是考虑到问题的本质,递归不会那么深,以便生成StackOverflow,或者对性能产生负面影响

code.朋友:

#!/usr/bin/env python3

import sys


def print_square_frame(side, char="*"):
    print(char * side)  # Upper row
    if side == 1:
        return
    for i in range(side // 2 - 1):
        print(char + " " * i + char + " " * (side - 2 * i - 4) + char + " " * i + char)
    if side % 2:
        print(char + " " * ((side - 3) // 2) + char + " " * ((side - 3) // 2) + char)  # Mid row
    for i in range(side // 2 - 2, -1, -1):
        print(char + " " * i + char + " " * (side - 2 * i - 4) + char + " " * i + char)
    print(char * side)  # Lower row


# Recursion
def _print_square_frame_rec(side, char, i):
    if i == side // 2 - 1:
        if side % 2 :
            print(char + " " * ((side - 3) // 2) + char + " " * ((side - 3) // 2) + char)  # Mid row
        return
    else:
        s = char + " " * i + char + " " * (side - 2 * i - 4) + char + " " * i + char
        print(s)
        _print_square_frame_rec(side, char, i + 1)
        print(s)


def print_square_frame_rec(side, char="*"):
    print(char * side)
    if side == 1:
        return
    _print_square_frame_rec(side, char, 0)
    print(char * side)
# Recursion end


def main(argv):
    dim = 10
    if argv:
        if argv[0].isdigit():
            dim = int(argv[0])
    print_square_frame(dim)


if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main(sys.argv[1:])

输出:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q055342983]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code.py
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32

**********
**      **
* *    * *
*  *  *  *
*   **   *
*   **   *
*  *  *  *
* *    * *
**      **
**********

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q055342983]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code.py 7
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32

*******
**   **
* * * *
*  *  *
* * * *
**   **
*******
© www.soinside.com 2019 - 2024. All rights reserved.