打印沙漏Python

编程入门 行业动态 更新时间:2024-10-25 06:21:01

打印<a href=https://www.elefans.com/category/jswz/34/1714415.html style=沙漏Python"/>

打印沙漏Python

本题最关键的步骤在于确定输入的n与打印层数之间的关系;本解法中是通过求和来判断层数的,稿图

源码如下

n,char=input().split()
n=int(n)
for i in range(n):
    if ((2*i*(i+2))+1)>n:
        row=i-1
        break
remain=n-((2*row*(row+2))+1)
for i in range(row,0,-1):
    line=" "*(row-i)+char*(2*i+1)
    print(line)
for i in range(row+1):
    line=" "*(row-i)+char*(2*i+1)
    print(line)
print(remain)

  1. 将输入的n转换为整数类型,并初始化层数i为0。

  2. 通过for循环计算出最大可能的沙漏层数,即在循环中判断当前层数的沙漏需要的符号数量是否大于n,如果大于n,则当前层数减1并退出循环。

  3. 计算出剩余符号数量remain,即n减去已经用于打印沙漏的符号数量。

  4. 通过for循环分别打印上半部分和下半部分的沙漏,上半部分从row到1循环,下半部分从0到row循环。每行打印row-i个空格和2i+1个字符。

  5. 最后打印剩余符号数量remain

  

 我们发现只有当n>=4时,该代码可以执行结果;当n=0,1,2,3时,会报错NameError。如果输入为0,程序将会出错,因为在for循环中,range(0)将不会执行任何操作,row将不会被初始化,导致后面计算剩余符号数量remain时出现错误。如果输入为1、2或3,程序将会输出一行空格,但是实际上应该输出一个字符。

因此我们在该代码基础上加入一些特判

n, char = input().split()
n = int(n)
if n == 0:  # 处理输入为0的情况
    print(0)
elif n == 1:  # 处理输入为1的情况
    print(char)
    print("0")
else:
    for i in range(n):
        if ((2*i*(i+2))+1)>n:
            row=i-1
            break
    remain=n-((2*row*(row+2))+1)
    if row == -1:  # 处理输入为2或3的情况
        row = 0
        remain = n-1
        print(char)
    else:
        for i in range(row,0,-1):
            line=" "*(row-i)+char*(2*i+1)
            print(line)
        for i in range(row+1):
            line=" "*(row-i)+char*(2*i+1)
            print(line)
    print(remain)

 在修改后的代码中,如果输入为0,程序将会直接输出0;如果输入为1,程序将会直接输出字符,并且输出0;如果输入为2或3,程序将会直接输出一个字符,并计算剩余符号数量remain。如果输入大于等于4,程序将会执行原来的打印沙漏

  

 

 

 

 

 

更多推荐

打印沙漏Python

本文发布于:2024-02-14 15:01:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763722.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:沙漏   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!