首页 > 解决方案 > python中的冰雹程序

问题描述

我必须在 python 中编写一个冰雹程序

您选择一个数字,如果是偶数则为一半,如果是奇数则将其乘以 3 并加 1。它说要继续这种模式,直到数字变为 1。

该程序将需要以下方法:

这是一个示例运行:

提示(输入)

Enter a positive integer (1-1000). To quit, enter -1: 20
20 10 5 16 8 4 2 1
The loop executed 8 times.

Enter a positive integer (1-1000). To quit, enter -1: 30
30 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
The loop executed 19 times.

Enter a positive integer (1-1000). To quit, enter -1: -1
Thank you for playing Hailstone.

现在我有这个:

count = 0
def hailstone(n):
    if n > 0
       print(n)
    if n > 1:
       if n % 2 == 0:
          hailstone(n / 2)
       else:
          hailstone((n * 3) + 1)
    count = count + 1

我不知道这之后该怎么办

标签: pythonpython-3.x

解决方案


尝试以模块化的方式思考,创建两个函数:check_number() 和 user_call()。Check_number 将验证循环中的当前数字是奇数还是偶数,并且 user_call() 只是将其包装以计算循环迭代的次数。

我在一本名为 Automate Boring Stuff with Python 的好书中找到了这个练习,如果你还不知道的话,你必须检查一下。

这是我的代码。尝试使用最适合您的东西。

from sys import exit


def check_number(number):
    
    if number % 2 ==0:
        print(number // 2)
        return(number // 2)
    else:
        print(number*3+1)
        return number*3+1

def user_call(number):
    count = 0
    while number != 1:
        count += 1
        number = check_number(number)
    return count


if __name__ == "__main__":
    
    try:
        number = int(input('Give a number \n'))
        count = user_call(number)
        print('count ',count)

    except Exception as e:
        exit()

推荐阅读