猪猪虾 发表于 2020-3-23 20:35:10

23讲课后习题 bei_chushu未定义?

# 写一个函数get_digits(n),将参数n分解出每个位的数字
#并按顺序存放到列表中。举例:get_digits(12345) ==>
def get_digits(num):
    code1=
    code2=[]
    if num<10:
      bei_chushu=code1(len(num)-2)   #判断输入的数有几位,来选择对谁取余数,2位,code,3位对code
      code2.append((num-num%bei_chushu)//bei_chushu)
      return get_digits(num-num%bei_chushu)
    code2.append(num-num%bei_chushu)
    return code2

number=int(input("enter an interger:"))
result=get_digits(number)
print(result)


sunrise085 发表于 2020-3-23 21:13:45

你的程序中,当num<10的时候,bei_chushu才被定义并赋值,若num>=10,bei_chushu是没有定义的。
你把问题想复杂了。何必从前向后计算,直接从个位开始不就可以了?那样就不用判断输入的num是几位数了。
list有两个函数是常用来添加元素的,你用的是append,是向后追加;还有一个insert,可以向任何位置添加。
这个题目,完全可以从个位开始,然后每次都用insert想最前面添加不就可以了?

#迭代方法
def get_digits(num):
    s=[]
    if num==0:
      s=
    while num:
      s.insert(0,num%10)
      num=num//10
    return s

#递归方法
def get_digit(n):
    s=[]
    if n>10:
      s=get_digit(n//10)
      s.append(n%10)
    else:
      s.append(n)
    return s

   
print(get_digits(0))
print(get_digits(9))
print(get_digits(12345))
print(get_digit(0))
print(get_digit(9))
print(get_digit(12345))

猪猪虾 发表于 2020-3-23 22:00:28

sunrise085 发表于 2020-3-23 21:13
你的程序中,当num=10,bei_chushu是没有定义的。
你把问题想复杂了。何必从前向后计算,直接从个位开始不 ...

# 写一个函数get_digits(n),将参数n分解出每个位的数字
#并按顺序存放到列表中。举例:get_digits(12345) ==>
def get_digits(num):
    code=[]
    if num>10:
      code.insert(0,num%10)
      return get_digits(num//10)
      
    else:
         code.insert(0,num)
    return code

number=int(input("enter an interger:"))
result=get_digits(number)
print("result=",result)


我知道改的那个和你的程序还有一点区别,我的第一个return那,我觉得这么用也没错呀,但是结果不对

sunrise085 发表于 2020-3-23 22:26:12

猪猪虾 发表于 2020-3-23 22:00
我知道改的那个和你的程序还有一点区别,我的第一个return那,我觉得这么用也没错呀,但是结果不对

关于递归,你发了好多帖子了。但是总是在问同样的问题。
不要贪多,贪多嚼不烂。需要好好地理解一下。
递归其实可以分两种,
一种类型:逐层深入,到最深层的时候返回,这一类型的特点就是在return处调用递归,例如你发的那个问年龄的帖子;
另一种类型:先逐层深入,到最深层有一个确切值,然后逐层返回,这一类型的递归的特点就是会将递归赋值给一个变量,比如我写的这个数字转换的递归。

建议你吧这几天你所提问的有关递归的帖子放到一起,好好研究一下。
就你现在这个问题,我已经和你说过好几次了。之前你好像发过一个帖子,说返回列表只有一个值。那个程序的错误和这个程序的错误一模一样。

zltzlt 发表于 2020-3-24 13:17:59

猪猪虾 发表于 2020-3-23 22:00
我知道改的那个和你的程序还有一点区别,我的第一个return那,我觉得这么用也没错呀,但是结果不对

把递归吃透再往下学吧

https://fishc.com.cn/thread-159033-1-1.html

猪猪虾 发表于 2020-3-24 14:22:16

sunrise085 发表于 2020-3-23 22:26
关于递归,你发了好多帖子了。但是总是在问同样的问题。
不要贪多,贪多嚼不烂。需要好好地理解一下。
...

好的,蟹蟹

猪猪虾 发表于 2020-3-24 14:22:55

zltzlt 发表于 2020-3-24 13:17
把递归吃透再往下学吧

https://fishc.com.cn/thread-159033-1-1.html

好的,蟹蟹
页: [1]
查看完整版本: 23讲课后习题 bei_chushu未定义?