找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5372|回复: 11

[求助] 新手求助!!!!

7

主题

16

帖子

16

积分

贫民

积分
16
元谋 发表于 2018-4-21 20:40:20 | 显示全部楼层 |阅读模式
编写一个collatz的函数,有一个名为number的参数,如果参数是偶数,打印number//2,并返回该值,如果是参数是奇数,打印并返回3*number+1,然后编写一个程序,让用户输入一个整数,并不断对这个整数调用collatz(),直到返回值1.(在前面的项目中添加try和except语句,检测用户是否输入一个非整数的字符串,正常情况下,int()函数在输入一个非整数字符串时会产生valueerror的错误)
try:
        number = int(input())
except ValueError:
        print('必须输入一个整数')
def collatz():
        while number ==1:
                break
        if number % 2==0:
                print('number //2')
                number = number
        elif number % 2==1:
                print('number *3+1')
                number = number *3+1
               

求大佬指出我的问题,并帮我完善下呗,谢谢大家
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-4-21 22:14:18 | 显示全部楼层
本帖最后由 sheeboard 于 2018-4-21 22:19 编辑

def collatz(number):
     if number%2==0:
        while number!=1:
            number=number//2
            print(number)
    else:
        print(number*3+1)

def process():
    while True:
        try:
              number=int(input())
              collatz(number)
        except:
             print('input integer please')
             continue
          else:
                  break
Screenshot from 2018-04-21 22-13-42.png
回复 支持 反对

使用道具 举报

7

主题

16

帖子

16

积分

贫民

积分
16
元谋  楼主| 发表于 2018-4-22 09:36:59 | 显示全部楼层
本帖最后由 元谋 于 2018-4-22 09:39 编辑
sheeboard 发表于 2018-4-21 22:14
def collatz(number):
     if number%2==0:
        while number!=1:

C:\Users\联想\Desktop

为什么报错啊

为什么报错啊
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-4-22 09:38:46 | 显示全部楼层
缩进
回复

使用道具 举报

7

主题

16

帖子

16

积分

贫民

积分
16
元谋  楼主| 发表于 2018-4-22 09:40:30 | 显示全部楼层

哪里需要缩进啊?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
小甲米 发表于 2018-4-23 14:32:30 | 显示全部楼层
def collatz(num):
    if num % 2 == 0:
        print("num:",num//2)
    else:
        print("num:",3*num+1)

if __name__ == '__main__':
    num = int(input("请输入数字:"))
    while True:
        if not (num == 1):
            collatz(num)
        break
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
hljycrgl 发表于 2018-4-23 17:22:42 | 显示全部楼层

函数里面不知道number的值
回复 支持 反对

使用道具 举报

0

主题

7

帖子

7

积分

贫民

积分
7
TomasW 发表于 2018-4-26 21:38:40 | 显示全部楼层
问题太多,按你的思路来,首先函数内用函数外的变量,应该申明一下全局变量,global number, 其次,while判断条件应该是为真才执行,所以应该为number!=1,之后的if和elif应该为while循环的块语句,需要缩进,再有对while循环来说,当number!=1为假时自然就不会再循环了,所以break多余,可以改成下面这样,最后一句为调用函数。 33333.png

回复 支持 反对

使用道具 举报

7

主题

16

帖子

16

积分

贫民

积分
16
元谋  楼主| 发表于 2018-4-30 17:25:19 | 显示全部楼层
TomasW 发表于 2018-4-26 21:38
问题太多,按你的思路来,首先函数内用函数外的变量,应该申明一下全局变量,global number, 其次,while判 ...

我用3.7的python版本运行上面代码为什么会报错啊?
回复 支持 反对

使用道具 举报

0

主题

7

帖子

7

积分

贫民

积分
7
TomasW 发表于 2018-5-1 13:12:39 | 显示全部楼层
写的时候没注意,实际上上个代码还是有问题的,只有输入数字时才能完整运行,如果你输入的是非数字,在最后的函数调用时number由于没有值则会报错,为了绕过这一点,函数调用应当位于try语句块中,另外,定义函数一般是不用全局变量的,number应当作为参数传递给它,所以大改一下可以是这个样子,try前的while程序的多次运行,如果只想运行一次可以删除。 555.png 666.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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