鱼C论坛

 找回密码
 立即注册
查看: 1149|回复: 6

[已解决]23讲课后习题 bei_chushu未定义?

[复制链接]
发表于 2020-3-23 20:35:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 写一个函数get_digits(n),将参数n分解出每个位的数字
#并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
def get_digits(num):
    code1=[10,100,1000,10000,100000,1000000,10000000]
    code2=[]
    if num<10:
        bei_chushu=code1(len(num)-2)   #判断输入的数有几位,来选择对谁取余数,2位,code[0],3位对code[1]
        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)


最佳答案
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=[0]
    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))

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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=[0]
    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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 22:00:28 | 显示全部楼层
sunrise085 发表于 2020-3-23 21:13
你的程序中,当num=10,bei_chushu是没有定义的。
你把问题想复杂了。何必从前向后计算,直接从个位开始不 ...
# 写一个函数get_digits(n),将参数n分解出每个位的数字
#并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
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那,我觉得这么用也没错呀,但是结果不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

建议你吧这几天你所提问的有关递归的帖子放到一起,好好研究一下。
就你现在这个问题,我已经和你说过好几次了。之前你好像发过一个帖子,说返回列表只有一个值。那个程序的错误和这个程序的错误一模一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

把递归吃透再往下学吧

https://fishc.com.cn/thread-159033-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-24 14:22:16 | 显示全部楼层
sunrise085 发表于 2020-3-23 22:26
关于递归,你发了好多帖子了。但是总是在问同样的问题。
不要贪多,贪多嚼不烂。需要好好地理解一下。
...

好的,蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-24 14:22:55 | 显示全部楼层
zltzlt 发表于 2020-3-24 13:17
把递归吃透再往下学吧

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

好的,蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 13:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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