嗨姐 发表于 2021-4-4 18:23:24

python,拜托纠正错误!

程序运行不了,应该有很多错误的地方,拜托指正!谢谢。

题目:
找出800-1200之间所有符合以下条件的数:该数的各位数字的阶乘和为素数。按如下格式打印出所有符合条件的数:
807:8!+0!+7!=45361
817:8!+1!+7!=45361
870:8!+7!+0!=45361
871:8!+7!+1!=45361
1002:1!+0!+0!+2!=5
1012:1!+0!+1!+2!=5
1020:1!+0!+2!+0!=5

…………

程序中包含两个函数,分别用于实现判断素数和计算阶乘。



for i in range(800,1201):
    st=str(i)
    for j in st:
      jie=1
      sum=0
      m=1
      all_data=[]
      num=0
      while int(j) >= m:
            jie=jie*m
            sum=sum+jie
            m=m+1
      print(sum)
      num+=1
      all_data.append(sum)
for sum in all_data:
    k=2
    if sum%k==0:
      break
    else:
      k+=1
print(i":"i"!+"i"!+"i"!="sum)

嗨姐 发表于 2021-4-4 18:32:11

不用造函数的方法这样能搞出来吗?

jackz007 发表于 2021-4-4 20:37:03

本帖最后由 jackz007 于 2021-4-4 20:41 编辑

def prime(n):
    r = False
    if n > 1:
      if n % 2 and n % 3 and n % 5 and n % 7:
            i = 3
            while i * i < n + 1:
                if not (n % i) :
                  break
                i += 2
            else:
                r = True
      elif n == 2 or n == 3 or n == 5 or n == 7:
            r = True
    return r

def jc(n):
    r = 1
    for i in range(n):
      r *= (i + 1)
    return r

for i in range(800 , 1201):
    j , d = i , []
    while j:
      d . insert(0 , j % 10)
      j //= 10
    e = []
    for k in range(len(d)):
      e . append(jc(d))
    s = sum(e)
    if prime(s):
      t = "%d:%d!" % (i , d)
      for k in range(1 , len(d)):
            t += '+%d!' % d
      t += '=%d' % s
      print(t)
      运行时况
D:\0002.Exercise\Python>python x.py
807:8!+0!+7!=45361
817:8!+1!+7!=45361
870:8!+7!+0!=45361
871:8!+7!+1!=45361
1002:1!+0!+0!+2!=5
1012:1!+0!+1!+2!=5
1020:1!+0!+2!+0!=5
1021:1!+0!+2!+1!=5
1102:1!+1!+0!+2!=5
1112:1!+1!+1!+2!=5
1120:1!+1!+2!+0!=5
1121:1!+1!+2!+1!=5
1200:1!+2!+0!+0!=5

D:\0002.Exercise\Python>
页: [1]
查看完整版本: python,拜托纠正错误!