Python打印空心三角和希尔顿序列

看到刚开始学python的作业觉得挺有意思,修改了之后拿出来分享一波。

打印空心三角

while True:
    try:
        height = int(input("请输入三角形的高度: "))
        if height <= 0:
            raise ValueError("无效的三角形高度!")
        break
    except ValueError as e:
        print(e)

while True:
    char = input("请输入三角形的填充字符: ")
    if char != "" and char != " ":
        break
    print("无效的字符输入!")

def triangle(h, c):
    print(" "*(h-1) + c)
    for i in range(1, h-1):
        print(" "*(h-i-1) + c + " "*(2*i-1) + c)
    if h > 1:
        print(" ".join([c]*h))

triangle(height, char)

这段代码使用一个while循环来要求用户输入三角形的高度,直到用户输入一个有效的高度为止。在每次迭代中,程序使用tryexcept语句块来捕获可能引发的ValueError异常,并将该异常的错误消息打印到屏幕上。如果用户提供了一个有效的高度,则程序会跳出循环并继续进行。然后程序使用另一个while循环要求用户输入要在三角形中使用的字符,直到用户提供有效的字符为止。在每次迭代中,程序检查用户输入的字符是否为空格或空字符串。如果是,则打印一条错误消息,并继续循环。如果用户提供了有效的字符,则程序会跳出循环并继续进行。

最后,程序定义一个名为triangle的函数,该函数使用用户提供的高度和字符打印一个三角形。如果用户提供的高度为1,则该函数仅打印一个字符,否则它将打印三角形的顶部、中间和底部部分。程序使用提供的高度和字符调用该函数。


 打印希尔顿序列(Hailstone Sequnce )

希尔顿序列即考拉兹猜想,又称奇偶归一猜想,冰雹猜想,其作为一个著名的数学问题,正确性至今都没有被得到证明。即:对任一正整数 n,若为偶数则除以 2,若为奇数则乘 3 再加 1,最后 n 总会变为 1。

input_num = int(input("N: "))
compare_num = 0
num = 0 

def count(n):
    loop_times = 0
    row_result = ""
    while n != 1:
        loop_times += 1
        if n % 2 == 0:
            k = n // 2
            if len(row_result):
                temp_text = ', ' + str(int(n))
                row_result += temp_text
            else:
                row_result += str(int(n))
            n = k
        else:
            l = n * 3 + 1
            if len(row_result):
                temp_text = ', ' + str(int(n))
                row_result += temp_text
            else:
                row_result += str(int(n))
            n = l
    if len(row_result):
        temp_text = ', ' + str(int(n))
        row_result += temp_text
    else:
        row_result += str(int(n))
    print(row_result)
    return loop_times
            
if input_num < 1:
    print("N must be positive!")
else:
    print(f'Hailstone sequences for 1 to {input_num}: ')
    for in_loop_num in range(1, input_num + 1):
        loop_result = count(in_loop_num)
        if loop_result > compare_num:
            compare_num = loop_result
            num = in_loop_num
    print(f"First longest sequence found in n = {num}")

当用户输入一个正整数N后,代码首先会定义变量compare_numnum,它们用于记录最长序列的循环次数和对应的起始数值。

然后定义了一个名为count的函数,用于计算给定数的Hailstone序列的循环次数。函数内部使用while循环,根据Hailstone规则生成序列,并使用loop_times变量记录循环次数。同时,将序列中的每个数拼接到row_result字符串中。

在主程序中,首先判断输入的N是否小于1,如果是,则打印提示信息并结束程序。否则,打印要计算的范围,并通过for循环从1到N遍历每个数值。对于每个数值,调用count函数计算其Hailstone序列的循环次数,并将其存储到loop_result变量中。如果loop_result大于compare_num,则更新compare_numnum的值。

最后打印出循环次数最多的序列所对应的起始数值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值