zcy1187949797 发表于 2021-11-7 18:06:59

萌新请教大佬,为啥会一直计算

想实现一个函数,如f(123 )返回值为【1,2,3】


list1 = []
def f(n):
   
    b =len(str(n))
    list1.append(int(n/(10**b)))
   
    b = b - 1
    if b > 0:
      f(n)
    else:
      return(list1.reverse())
f(123){:10_269:}

kogawananari 发表于 2021-11-7 18:19:27

问题很多
1.   list1.reverse()没有返回值 你应该返回的是list1
2.   n没有重新赋值这会导致最后list1是

你这代码不好改 一改就是重写了不过建议用while循环

kogawananari 发表于 2021-11-7 18:22:13

def f(n):
    list1 = []
    b =len(str(n))
    while b > 0:
      b = b - 1
      list1.append(int(n/(10**b))%10)
    return(list1)
print(f(123))修复

jackz007 发表于 2021-11-7 18:33:31

本帖最后由 jackz007 于 2021-11-7 19:34 编辑

      楼主的方法:
list1 = []
def f(n):
    b = len(str(n)) - 1
    while b >= 0:
      list1 . append(n // 10 ** b)
      n %= 10 ** b
      b -= 1
f(123)
print(list1)
      其实不用那么复杂,请参考下面的代码:
      循环的方法:
list1 = []
def f(n):
    while n:
      list1 . insert(0 , n % 10)
      n //= 10
f(123)
print(list1)
      递归的方法:
list1 = []
def f(n):
    if n:
      f(n // 10)
      list1 . append(n % 10)
f(123)
print(list1)

MachineGirl 发表于 2021-11-8 10:48:43

{:5_103:}看来问题已经解决了

zcy1187949797 发表于 2021-11-8 16:27:39

kogawananari 发表于 2021-11-7 18:19
问题很多
1.   list1.reverse()没有返回值 你应该返回的是list1
2.   n没有重新赋值这会导致最后list ...

好的好的,谢谢,我懂了

zcy1187949797 发表于 2021-11-8 16:28:08

jackz007 发表于 2021-11-7 18:33
楼主的方法:

      其实不用那么复杂,请参考下面的代码:


谢谢大佬!

zcy1187949797 发表于 2021-11-8 16:28:53

kogawananari 发表于 2021-11-7 18:22
修复

谢谢大佬!
页: [1]
查看完整版本: 萌新请教大佬,为啥会一直计算