Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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_Printing_Frame - Fatal编程技术网

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

尝试打印框架'*';python中的对角线和对角线,python,printing,frame,Python,Printing,Frame,我尝试在框架和对角线中打印“*” 这就是我所做的: 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, '*') 结果是: ********** * * * * * * * * * *

我尝试在框架和对角线中打印“*”

这就是我所做的:

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, '*')
结果是:

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

正如我在评论中指出的,只有正方形矩阵才有对角线。但即使对这些人来说,事情也比看上去“有点”复杂:

  • 我本可以在一个循环中完成,但我认为最好看到所有的“部分”
  • (字符串)计算本可以用更简洁的方式编写,但为了清晰起见,我保留了它们
  • 还添加了递归变量。我更喜欢这一个,因为它更清楚(虽然一般来说,递归有局限性),特别是考虑到问题的性质,递归没有深入到足以产生堆栈溢出或对性能产生负面影响的程度
  • 我没有在函数中打印字符串,而是“返回”它们。这是一种优化技术:如果在多个地方需要它们,则只需调用一次函数
  • 函数是生成器(收益率而不是收益率)。这也是一种优化(而且是Pythonic)
代码01.py:


请给出一个预期输出的例子,以及您认为代码不起作用的原因。只有正方形矩阵才有对角线。您确定不需要方形框架(
def print\u框架(n,c):
)?矩形框架也可以,但它更复杂,对角线看起来不像直线。
#!/usr/bin/env python3

import sys


def square_frame_iterative(side, char="*"):
    yield char * side  # Upper row
    for i in range(1, side - 1):
        edge_space = min(i - 1, side - 2 - i)
        mid_space = side - 2 * edge_space - 4
        mid_text = char if mid_space < 0 else char + " " * mid_space + char
        yield char + " " * edge_space + mid_text + " " * edge_space + char
    yield char * side  # Lower row


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


def square_frame_recursive(side, char="*"):
    yield char * side  # Upper row
    if side <= 1:
        return
    yield from _square_frame_recursive(side, char, 0)
    yield char * side  # Lower row

# Recursion end


def main(argv):
    dim = 10
    square_frame_func = square_frame_iterative
    if argv:
        if argv[0].isdigit():
            dim = int(argv[0])
        if (len(argv) > 1) and argv[1].lower().startswith("rec"):
            square_frame_func = square_frame_recursive
    frame_string = "\n".join(square_frame_func(dim))
    print(frame_string)


if __name__ == "__main__":
    print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(item.strip() for item in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))
    main(sys.argv[1:])
    print("\nDone.")