【纯小白】自学Python,下面编程算是自己写的第一个Python代码
本帖最后由 1101170728 于 2023-12-9 23:23 编辑纯小白一个,自学Python没多久,有一道练习题,自己调试了好久,才调试出来。不知道有没有更好的写法,特来求大神指导一下。
这算是自己写的第一个Python代码
题目如下:
编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。
然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1
自己码的代码,调试了好久才跑通.......
https://z1.ax1x.com/2023/12/09/piRir5T.jpg
结果为
http://n9364.bvimg.com/21214/fa8f10f88421d749.jpg
感觉楼主写的不对呦,我的理解是用户只输入一次数,循环调用函数,参数是上一次调用的返回值,直到返回值是1 collatz(),这里错了 本帖最后由 vethenc 于 2023-12-10 10:31 编辑
```python
# 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()
```
疑问:为啥输入小数也能正常退出? 是不是这样调用更好一些:
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) #定义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()
典型的递归题目,各位不要搞错了全在while。 苏紫方璇 发表于 2023-12-10 09:23
感觉楼主写的不对呦,我的理解是用户只输入一次数,循环调用函数,参数是上一次调用的返回值,直到返回值是 ...
程序是能跑通,不过也有bug,如果输入0和负数,也是有问题的,需要再完善一下 vethenc 发表于 2023-12-10 10:20
```python
# collatz2.py
跑了一下,觉得可以把for i in range(5):删除, 本帖最后由 1101170728 于 2023-12-10 21:26 编辑
感谢#6 楼主,受#6 楼主启发,完善了一些,杜绝了一些小bug
#定义 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()
输出结果:
https://z1.ax1x.com/2023/12/10/piRWsRH.png
页:
[1]
2