吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 849|回复: 16
收起左侧

[学习记录] 【纯小白】自学Python,下面编程算是自己写的第一个Python代码

[复制链接]
1101170728 发表于 2023-12-9 22:17
本帖最后由 1101170728 于 2023-12-9 23:23 编辑

纯小白一个,自学Python没多久,有一道练习题,自己调试了好久,才调试出来。不知道有没有更好的写法,特来求大神指导一下。
这算是自己写的第一个Python代码
题目如下:
    编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。
    然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1



自己码的代码,调试了好久才跑通.......



结果为








免费评分

参与人数 1热心值 +1 收起 理由
chiqiu521 + 1 作为一个小白有什么自学的方法吗?求,想学谢谢

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2023-12-10 09:23
感觉楼主写的不对呦,我的理解是用户只输入一次数,循环调用函数,参数是上一次调用的返回值,直到返回值是1
sai609 发表于 2023-12-10 09:52
vethenc 发表于 2023-12-10 10:20
本帖最后由 vethenc 于 2023-12-10 10:31 编辑

# collatz2.py

def collatz():
    num= eval(input("请输入一个正整数:"))
    while True:
        if num == 0:
            print("你输入了一个非正整数!")
            break
        if num == 1:
            break
        if num % 2 == 0 :
            num = num // 2
            print(num)
        else:
            num = 3 * num + 1
            print(num)

for i in range(5):
    collatz()


疑问:为啥输入小数也能正常退出?
surepj 发表于 2023-12-10 10:23
是不是这样调用更好一些:
[Python] 纯文本查看 复制代码
def collaz(number):
    if number % 2 == 0:
        return number // 2
    else:
        return 3 * number + 1

while True:
    number = int(input("Enter a int number:"))
    res = collaz(number)
    print(res)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
T4DNA + 1 + 1 你这个符合题目

查看全部评分

aixiaodemj 发表于 2023-12-10 12:57
[Python] 纯文本查看 复制代码
#  定义collatz函数
def collatz(number):
    if number % 2 == 0:
        result = number // 2
    else:
        result = 3 * number + 1

    print(result)
    return result


# main函数
def main():
    try:
        number = int(input("请输入一个整数: "))
        while number != 1:
            number = collatz(number)
    except ValueError:
        print("请输入一个有效的整数!")


main()
zhuxiangyu1024 发表于 2023-12-10 16:59
典型的递归题目,各位不要搞错了全在while。
 楼主| 1101170728 发表于 2023-12-10 20:05
苏紫方璇 发表于 2023-12-10 09:23
感觉楼主写的不对呦,我的理解是用户只输入一次数,循环调用函数,参数是上一次调用的返回值,直到返回值是 ...

程序是能跑通,不过也有bug,如果输入0和负数,也是有问题的,需要再完善一下

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
starry988 + 1 + 1 我很赞同!

查看全部评分

 楼主| 1101170728 发表于 2023-12-10 20:14
vethenc 发表于 2023-12-10 10:20
[md]```python

# collatz2.py

跑了一下,觉得可以把for i in range(5):删除,
 楼主| 1101170728 发表于 2023-12-10 21:22
本帖最后由 1101170728 于 2023-12-10 21:26 编辑


感谢#6 楼主,受#6 楼主启发,完善了一些,杜绝了一些小bug


[Python] 纯文本查看 复制代码

#定义 collaz()函数
def collaz():
    while True:
        if number == 1:
            break
        if number % 2 == 0 :
            number = number // 2
            print(number)
        elif number % 2 == 1:
            number = 3*number + 1
            print(number)

#定义 main()函数
def main():
    while True:
        try:
            number = int(input("请输入一个正整数: "))
            if number <= 0:
                print("请输入一个有效的正整数:")
                continue
            while number != 1:
                number = collatz(number)
            break
        except ValueError:
            print("请输入一个有效的正整数!") 
main()



输出结果:

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表