鱼C论坛

 找回密码
 立即注册
查看: 1174|回复: 7

[已解决]请问我这个代码哪里出错了啊

[复制链接]
发表于 2020-8-1 22:29:59 | 显示全部楼层 |阅读模式

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

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

x
  1. #1. 写一个函数get_digits(n),将参数n每个位置的数字分解出来并按顺序存放到列表中。
  2. #举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
  3. def length(n):
  4.     str1 = str(n)
  5.     global length1
  6.     length1 = len(str1)
  7.     return length1

  8. def get_digits(n):
  9.     if length1 == 1:
  10.         return [n]
  11.     else:
  12.         for i in range(1, length1 + 1):
  13.             #将 n 中的每一位数取出来
  14.             list1.append(n // (10 ** (i - 1) % 10))
  15.         list1.reverse()
  16.         return list1
  17. list1 = []
  18. n = int (input ("请输入一个整数:"))
  19. length(n)
  20. result = get_digits(n)
  21. # %s 可以接收任意类型的值
  22. print ("%d --> %s" %(n, result))
复制代码



运行结果如图,说的是除以0了 但是检查了一下没有发现除以0啊 开始第一次循环就是1
最佳答案
2020-8-1 22:40:03
本帖最后由 Twilight6 于 2020-8-1 23:27 编辑



你的代码可以在 for 循环里面测试下  (10 ** (i - 1) % 10) 的值,会发现第二次就为 0 了

改成
((n //10 ** (i - 1)) % 10)
这样就好了:

  1. #1. 写一个函数get_digits(n),将参数n每个位置的数字分解出来并按顺序存放到列表中。
  2. #举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
  3. def length(n):
  4.     str1 = str(n)
  5.     global length1
  6.     length1 = len(str1)
  7.     return length1

  8. def get_digits(n):
  9.     if length1 == 1:
  10.         return [n]
  11.     else:
  12.         for i in range(1, length1 + 1):
  13.             #将 n 中的每一位数取出来
  14.             list1.append((n //10 ** (i - 1)) % 10)
  15.         list1.reverse()
  16.         return list1
  17. list1 = []
  18. n = int (input ("请输入一个整数:"))
  19. length(n)
  20. result = get_digits(n)
  21. # %s 可以接收任意类型的值
  22. print ("%d --> %s" %(n, result))
复制代码
111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-1 22:34:23 | 显示全部楼层
大佬们快来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-1 22:40:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-8-1 23:27 编辑



你的代码可以在 for 循环里面测试下  (10 ** (i - 1) % 10) 的值,会发现第二次就为 0 了

改成
((n //10 ** (i - 1)) % 10)
这样就好了:

  1. #1. 写一个函数get_digits(n),将参数n每个位置的数字分解出来并按顺序存放到列表中。
  2. #举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
  3. def length(n):
  4.     str1 = str(n)
  5.     global length1
  6.     length1 = len(str1)
  7.     return length1

  8. def get_digits(n):
  9.     if length1 == 1:
  10.         return [n]
  11.     else:
  12.         for i in range(1, length1 + 1):
  13.             #将 n 中的每一位数取出来
  14.             list1.append((n //10 ** (i - 1)) % 10)
  15.         list1.reverse()
  16.         return list1
  17. list1 = []
  18. n = int (input ("请输入一个整数:"))
  19. length(n)
  20. result = get_digits(n)
  21. # %s 可以接收任意类型的值
  22. print ("%d --> %s" %(n, result))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 07:31:29 From FishC Mobile | 显示全部楼层
yrhhh 发表于 2020-8-1 22:34
大佬们快来


额,你这种方法我真的没用过
我用的都是这个:
  1. def get_digit(n: int) -> list:
  2.     return [int(_) for _ in list(str(num))]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 08:38:42 | 显示全部楼层
_2_ 发表于 2020-8-2 07:31
额,你这种方法我真的没用过
我用的都是这个:

感觉很高端的样子 好像还没学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 08:41:54 | 显示全部楼层
Twilight6 发表于 2020-8-1 22:40
你的代码可以在 for 循环里面测试下  (10 ** (i - 1) % 10) 的值,会发现第二次就为 0 了

改成这 ...

哦哦 懂了 原来是括号的问题 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 09:44:26 From FishC Mobile | 显示全部楼层
yrhhh 发表于 2020-8-3 08:38
感觉很高端的样子  好像还没学

没事,以后会学到的
换一种思路就会很简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 10:27:14 | 显示全部楼层
_2_ 发表于 2020-8-3 09:44
没事,以后会学到的
换一种思路就会很简单

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 21:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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