鱼C论坛

 找回密码
 立即注册
查看: 930|回复: 5

[已解决]每日一题220

[复制链接]
发表于 2019-1-18 21:32:55 | 显示全部楼层 |阅读模式

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

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

x
我是迭代的n,为什么迭代的list呢 在list前加int也不行
help

  1. n = 31
  2. n = list(n).append(0, 3)
  3. for i in range(2, n):
  4.     if (n % i) == 0:
  5.         print(n, "不是质数")
  6.         print(i, "乘以", n//i, "是", n)
  7.         break
  8. else:
  9.     print(n, "是质数")
复制代码


错误:
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe C:/Users/Administrator/fab200(判断3..1是质数).py
Traceback (most recent call last):
  File "C:/Users/Administrator/fab200(判断3..1是质数).py", line 2, in <module>
    n = list(n).append(0, 3)
TypeError: 'int' object is not iterable

Process finished with exit code 1
最佳答案
2019-1-18 23:02:03
本帖最后由 sunrise085 于 2019-1-18 23:06 编辑

数字是不能迭代的,所以list()中不能是数字(包括int和float)。
你要在31前面添加3,有很多种方法。
例如:num=int(str(num)[0]+str(num))

再者,你的程序只有一层循环,n也只在第二行修改过一次,也就只能判断一个数是否是质数。
我在你的程序的基础上帮你修改了一下。
  1. n='31'
  2. flag=True
  3. while flag:
  4.     num=int(n)
  5.     for i in range(2,int(num**0.5+1)):
  6.         if num%i==0:
  7.             print(n, "不是质数",end='  ')
  8.             print(i, "乘以", num//i, "是", n)
  9.             flag=False
  10.             break
  11.     else:
  12.         print(n,"是质数")
  13.     n=n[0]+n[:]
复制代码


下面是我写过的程序:
  1. def prime(num):
  2.         flag=True
  3.         for j in range(2,int(num**0.5)+1):
  4.                 if num%j == 0:
  5.                         flag=False
  6.                         break
  7.         if flag:
  8.                 print("%d是质数" %num)
  9.         else:
  10.                 print("%d不是质数" %num)
  11.         return flag

  12. num=int(input("请输入一个两位整数:"))
  13. s=str(num)[0]
  14. while True:
  15.         flag=prime(num)
  16.         if flag:
  17.                 num=int(s+str(num))
  18.         else:
  19.                 break
复制代码

还可以这样写:
  1. def iscom(num):
  2.     for i in range(2,int(num**0.5+1)):
  3.         if num % i != 0:
  4.             continue
  5.         else:            
  6.             return  False
  7.     print('%d是质数'% num)
  8.     return True

  9. num=31
  10. n = 1
  11. m=num//10
  12. s=str(num)[0]#取num的最高位
  13. while 1:
  14.     flag=iscom(num)
  15.     if not flag:
  16.         print('%d不是质数'% num)
  17.         break
  18.     n += 1
  19.     num=(m*10**n)+num#num最高位前添加一位
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-18 21:55:17 | 显示全部楼层
第二行去掉就可以了  你list里面输入Int 当然不行.  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 22:13:34 | 显示全部楼层
@... 发表于 2019-1-18 21:55
第二行去掉就可以了  你list里面输入Int 当然不行.

但是我是要在后面逐个增加3啊,直接去掉不就是判断31是不是质数了嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 23:02:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2019-1-18 23:06 编辑

数字是不能迭代的,所以list()中不能是数字(包括int和float)。
你要在31前面添加3,有很多种方法。
例如:num=int(str(num)[0]+str(num))

再者,你的程序只有一层循环,n也只在第二行修改过一次,也就只能判断一个数是否是质数。
我在你的程序的基础上帮你修改了一下。
  1. n='31'
  2. flag=True
  3. while flag:
  4.     num=int(n)
  5.     for i in range(2,int(num**0.5+1)):
  6.         if num%i==0:
  7.             print(n, "不是质数",end='  ')
  8.             print(i, "乘以", num//i, "是", n)
  9.             flag=False
  10.             break
  11.     else:
  12.         print(n,"是质数")
  13.     n=n[0]+n[:]
复制代码


下面是我写过的程序:
  1. def prime(num):
  2.         flag=True
  3.         for j in range(2,int(num**0.5)+1):
  4.                 if num%j == 0:
  5.                         flag=False
  6.                         break
  7.         if flag:
  8.                 print("%d是质数" %num)
  9.         else:
  10.                 print("%d不是质数" %num)
  11.         return flag

  12. num=int(input("请输入一个两位整数:"))
  13. s=str(num)[0]
  14. while True:
  15.         flag=prime(num)
  16.         if flag:
  17.                 num=int(s+str(num))
  18.         else:
  19.                 break
复制代码

还可以这样写:
  1. def iscom(num):
  2.     for i in range(2,int(num**0.5+1)):
  3.         if num % i != 0:
  4.             continue
  5.         else:            
  6.             return  False
  7.     print('%d是质数'% num)
  8.     return True

  9. num=31
  10. n = 1
  11. m=num//10
  12. s=str(num)[0]#取num的最高位
  13. while 1:
  14.     flag=iscom(num)
  15.     if not flag:
  16.         print('%d不是质数'% num)
  17.         break
  18.     n += 1
  19.     num=(m*10**n)+num#num最高位前添加一位
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-1-18 23:13:30 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-18 23:26 编辑

第一,int类型不能转list把,其次,append(0,3)这是什么语法?append一次可以加两个值了?其次,你通过什么把第二次的331假如到循环里面?
  1. q = True
  2. n = 31
  3. while q:
  4.     for i in range(2,n):
  5.         if n%i ==0 :
  6.             print(n, "不是质数")
  7.             print(i, "乘以", n // i, "是", n)
  8.             q = False
  9.             break
  10.     else:
  11.         print(n, "是质数")
  12.         n = int("3" + str(n))
  13.         continue
复制代码

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

使用道具 举报

发表于 2019-1-19 01:15:57 | 显示全部楼层
用字符串或者算术法构建那个数字比较好使
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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