鱼C论坛

 找回密码
 立即注册
查看: 1169|回复: 10

[已解决]求教我写的这个代码哪里有问题呢?

[复制链接]
发表于 2018-2-20 22:31:54 | 显示全部楼层 |阅读模式

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

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

x

如题:
  1. def get_digit(n):
  2.    
  3.     list1 = []
  4.     if n < 1:
  5.         return -1
  6.         print(list1)
  7.         list1.sort()
  8.         
  9.     else:
  10.         i = n % 10
  11.         list1.append(i)
  12.         n //= 10
  13.         return get_digit(n)

  14. result = get_digit(12345)
  15. print('result')
复制代码
最佳答案
2018-2-21 00:45:35
首先明确一下逻辑,我猜你的意思是,如果你输入的n是小于1的,那么就返回一个-1,代表没办法排列,剩下的情况是可以排列的。

先这个逻辑来写,

然后,需要指出一个问题就是,你这个题目中要求你返回一个排好序列的list,这个函数的返回值直接返回一个list就好。
以下是我修改的代码:
屏幕快照 2018-02-20 上午11.18.54.png
当n !=0 时,就一直运行else里面的内容,直到n被除完然后输出结果。

其实,这个题没有那么麻烦,你可以直接用list的功能,例如:
屏幕快照 2018-02-20 上午11.28.00.png
你传给函数的是一个int,把它转换成str,如果list里是str的话它会把str以字母为单位拆成元素。

我看你是打算用递归的方式来写,这个题其实不需要

屏幕快照 2018-02-20 下午10.30.59.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-20 22:58:05 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2018-2-21 08:13 编辑

1.return 语句下面不用写print()什么的了,return 之后就退出函数了,这些语句都不会被执行的。
2.print('result')是错的,是print(result)。
3.你的这个题目用递归写没必要。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-21 00:45:35 | 显示全部楼层    本楼为最佳答案   
首先明确一下逻辑,我猜你的意思是,如果你输入的n是小于1的,那么就返回一个-1,代表没办法排列,剩下的情况是可以排列的。

先这个逻辑来写,

然后,需要指出一个问题就是,你这个题目中要求你返回一个排好序列的list,这个函数的返回值直接返回一个list就好。
以下是我修改的代码:
屏幕快照 2018-02-20 上午11.18.54.png
当n !=0 时,就一直运行else里面的内容,直到n被除完然后输出结果。

其实,这个题没有那么麻烦,你可以直接用list的功能,例如:
屏幕快照 2018-02-20 上午11.28.00.png
你传给函数的是一个int,把它转换成str,如果list里是str的话它会把str以字母为单位拆成元素。

我看你是打算用递归的方式来写,这个题其实不需要

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

使用道具 举报

发表于 2018-2-21 01:34:09 | 显示全部楼层
print()里不用加符号,加了符号是字符串的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-21 09:40:00 | 显示全部楼层
junkaiw 发表于 2018-2-21 00:45
首先明确一下逻辑,我猜你的意思是,如果你输入的n是小于1的,那么就返回一个-1,代表没办法排列,剩下的情 ...

感谢指点~我后来又自己修改了一下,改成下面这样的,可以run出来,但不知道逻辑是否正确
  1. list1 = []
  2. def get_digit(n):
  3.     if n < 1:
  4.         list1.sort()
  5.         print(list1)
  6.         
  7.     else:
  8.         i = n % 10
  9.         list1.append(i)
  10.         n //= 10
  11.         return get_digit(n)

  12. result = get_digit(12345)
  13. print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-21 09:40:55 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-20 22:58
1.return 语句下面不用写print()什么的了,return 之后就退出函数了,这些语句都不会被执行的。
2.print(' ...

非常感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-21 09:41:54 | 显示全部楼层
99TANK 发表于 2018-2-21 01:34
print()里不用加符号,加了符号是字符串的意思

非常感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-21 09:49:28 | 显示全部楼层
junkaiw 发表于 2018-2-21 00:45
首先明确一下逻辑,我猜你的意思是,如果你输入的n是小于1的,那么就返回一个-1,代表没办法排列,剩下的情 ...

第二个代码返回的是字符串形式,好像不太对诶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-21 10:25:12 | 显示全部楼层
effy1995 发表于 2018-2-21 09:49
第二个代码返回的是字符串形式,好像不太对诶

哦哦,我才发现,你要返回的是int,我之前写第二个的时候忘了我再想一下,看看能不能这么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-21 10:34:52 | 显示全部楼层
effy1995 发表于 2018-2-21 09:49
第二个代码返回的是字符串形式,好像不太对诶

屏幕快照 2018-02-20 下午9.33.15.png
那就加一个for loop给丫转回来
这样就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-21 10:38:39 | 显示全部楼层
junkaiw 发表于 2018-2-21 10:34
那就加一个for loop给丫转回来  
这样就行了

嗯嗯 感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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