尝试打印框架'*';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)
请给出一个预期输出的例子,以及您认为代码不起作用的原因。只有正方形矩阵才有对角线。您确定不需要方形框架(
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.")