Python 初学者趣味练习题汇编(共42题,中文版)

Python 初学者趣味练习题汇编

作为一枚Python初学者,我在学习Python的过程中做了大量的练习。同时,这些练习大部分都非常有趣,让我能够保持兴趣坚持下来,为了让学弟学妹们能够获得一份较好的Python学习资料,更快掌握这门语言的基本用法,我把我练习的成果加以汇编,供大家学习参考。其中大部分题目来自于《C语言初学者趣味编程100例》(贾蓓/郭强/刘占敏)。

第1题 百鸡百钱问题

Question:
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,翻译过来即:公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
Python Code:

#100$ for 100 chickens
for i in range(0,20):   #number of cock
   for j in range(0,34):   #number of hen
      for k in range(0,34):   #groups of small chicken(3 per group)
         if i+j+3*k==100 and 5*i+3*j+k==100:
            print(i,j,3*k)

Running Results:
cock: 0 hen: 25 chichen: 75
cock: 4 hen: 18 chichen: 78
cock: 8 hen: 11 chichen: 81
cock: 12 hen: 4 chichen: 84

第2题:借书方案

Question:
小明有5本新书,要借给A、B、C三位小朋友,如果没人每次只能借1本书,则可以有多少种借法?
Python Code:

a=0
for i in range(1,6):
   for j in range(1,6):
      for k in range(1,6):
         if i!=j and j!=k and i!=k:
            a=a+1
            print('A:',i,'B:',j,'C:',k)
print('Total:',a)

Running Results:
A: 1 B: 2 C: 3
A: 1 B: 2 C: 4
A: 1 B: 2 C: 5
A: 1 B: 3 C: 2
A: 1 B: 3 C: 4
A: 1 B: 3 C: 5
A: 1 B: 4 C: 2
A: 1 B: 4 C: 3
A: 1 B: 4 C: 5
A: 1 B: 5 C: 2
A: 1 B: 5 C: 3
A: 1 B: 5 C: 4
A: 2 B: 1 C: 3
A: 2 B: 1 C: 4
A: 2 B: 1 C: 5
A: 2 B: 3 C: 1
A: 2 B: 3 C: 4
A: 2 B: 3 C: 5
A: 2 B: 4 C: 1
A: 2 B: 4 C: 3
A: 2 B: 4 C: 5
A: 2 B: 5 C: 1
A: 2 B: 5 C: 3
A: 2 B: 5 C: 4
A: 3 B: 1 C: 2
A: 3 B: 1 C: 4
A: 3 B: 1 C: 5
A: 3 B: 2 C: 1
A: 3 B: 2 C: 4
A: 3 B: 2 C: 5
A: 3 B: 4 C: 1
A: 3 B: 4 C: 2
A: 3 B: 4 C: 5
A: 3 B: 5 C: 1
A: 3 B: 5 C: 2
A: 3 B: 5 C: 4
A: 4 B: 1 C: 2
A: 4 B: 1 C: 3
A: 4 B: 1 C: 5
A: 4 B: 2 C: 1
A: 4 B: 2 C: 3
A: 4 B: 2 C: 5
A: 4 B: 3 C: 1
A: 4 B: 3 C: 2
A: 4 B: 3 C: 5
A: 4 B: 5 C: 1
A: 4 B: 5 C: 2
A: 4 B: 5 C: 3
A: 5 B: 1 C: 2
A: 5 B: 1 C: 3
A: 5 B: 1 C: 4
A: 5 B: 2 C: 1
A: 5 B: 2 C: 3
A: 5 B: 2 C: 4
A: 5 B: 3 C: 1
A: 5 B: 3 C: 2
A: 5 B: 3 C: 4
A: 5 B: 4 C: 1
A: 5 B: 4 C: 2
A: 5 B: 4 C: 3
Total: 60

第3题:三天打鱼两天晒网

Question:
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的以后的某一天中是打鱼还是晒网。(以2020年8月1日为例)
Python Code:

def Days(y,m,d):
   list1=[31,28,31,30,31,30,31,31,30,31,30,31]
   a=0
   for i in range(1990,y):
      if (i%4==0 and i%100!=0) or i%400==0:
         a=a+366
      else:
         a=a+365
   for j in range(m-1):
      a=a+list1[j]
   if ((y%4==0 and y%100!=0) or y%400==0) and m>=3:
      a=a+1
   a=a+d
   return a

list1=['晒网','打鱼','打鱼','打鱼','晒网']
y=2020
m=8
d=1
n=Days(y,m,d)

print(y,'年',m,'月',d,'日',list1[n%5])

Running Results:
2020 年 8 月 1 日 打鱼
Brief analysis:
上述代码定义了函数Days,用于计算指定日期距1990年1月1日的天数,比如1990年1月3日距1990年1月1日为3天,2020年8月1日距1990年1月1日为11171天,然后根据相隔的天数和“三天打鱼两天晒网”的规律来计算这天是打鱼还是晒网。函数Days的核心是闰年的计算,闰年即该年份可以被4整除并且不能被100整除或者能被400整除。

第4题 肇事卡车

Question:
一辆卡车发生交通事故后逃跑,现场有三个目击者,但都没有记住车牌号,只记下车号的一些特征,甲说:卡车牌照的前两位数字相同;乙说:开车牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位车号刚好是一个整数的平方。请根据以上线索求出肇事卡车车号。
Python Code:

for i in range(10,100):
   for j in range(10,100):
      if i%10==i//10 and j%10==j//10 and i!=j and int((i*100+j)**(1/2))==(i*100+j)**(1/2):
         print(i*100+j)

Running Results:
7744

第5题 兔子产子问题

Question:
有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第三个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?
Python Code:

list1=[1,1]
a=0
for i in range(0,30):
   a=list1[i]+list1[i+1]
   list1.append(a)
print(list1)

Running Results:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309]
经分析,兔子产子符合斐波那契数列,因此得出以上结果

第6题 牛顿迭代法求特定方程根

Question:
用牛顿迭代法求方程2x3−4x2+3x−6=0在1附近的一个实数根。
Python Code:

def root(a,b,c,d):
   x0=1.5
   for i in range(10):
      x0=x0-(a*x0**3+b*x0**2+c*x0+d)/(3*a*x0**2+2*b*x0+c)
      i=i+1
      print(x0)

root(2,-4,3,-6)

Running Results:
2.008033826638478
2.000046582476779
2.000000001578059
2.0
2.0
2.0
2.0
2.0
2.0
2.0

第7题 最佳存款方案

Question:
银行一年整存零取的月息为0.63%。某人手中有一笔钱,她打算在今后的5年中每年年底取出1000元,到第5年时刚好取完,请算出她存钱的时应该存入多少?
Python Code:

m=0
for i in range(5):
   m=(1000+m)/(1+12*0.0063)
print(m)

Running Results:
4039.444465119001

第8题 冒泡排序

Question:
对一组数进行简单排序(冒泡排序)。
Python Code:

list1=[4,1,78,25,52,13,90,67,87,90,123]

for i in range(len(list1)):
   for j in range(i,len(list1)):
      if list1[i]>list1[j]:
         a=list1[i]
         list1[i]=list1[j]
         list1[j]=a
         print(list1)

Running Results:
[1, 4, 78, 25, 52, 13, 90, 67, 87, 90, 123]
[1, 4, 25, 78, 52, 13, 90, 67, 87, 90, 123]
[1, 4, 13, 78, 52, 25, 90, 67, 87, 90, 123]
[1, 4, 13, 52, 78, 25, 90, 67, 87, 90, 123]
[1, 4, 13, 25, 78, 52, 90, 67, 87, 90, 123]
[1, 4, 13, 25, 52, 78, 90, 67, 87, 90, 123]
[1, 4, 13, 25, 52, 67, 90, 78, 87, 90, 123]
[1, 4, 13, 25, 52, 67, 78, 90, 87, 90, 123]
[1, 4, 13, 25, 52, 67, 78, 87, 90, 90, 123]

第9题 数制转换

Question:
十进制转换成二进制。
Python Code:

def binary(n):
   list1=[]
   a=0
   while n!=0:
      list1.append(n%2)
      n=n//2
      print(n)
   for i in range(len(list1)):
      print(list1[len(list1)-1-i],end=' ')

binary(256)

Running Results:
128
64
32
16
8
4
2
1
0
1 0 0 0 0 0 0 0 0

第10题 个人所得税

Question:
我国的个人所得税采用超额累进税率,其中税率定义为:
起征点:3500元
工资不超过1500的部分,税率为3%;
当工资在区间(1500, 4500]时,税率为10%;
当工资在区间(4500, 9000]时,税率为20%;
当工资在区间(9000, 35000]时,税率为25%;
当工资在区间(35000, 55000]时,税率为30%;
当工资在区间(550000, 80000]时,税率为35%;
当工资超过80000时,税率为45%。
求指定工资应缴纳的个人所得税
Python Code:

m=36000
s1=0
s2=0
s3=0
s4=0
s5=0
s6=0

if m>3500:
   s1=s1+1500*0.03
   if m>4500:
      s2=s2+(4500-1500)*0.1
   elif m<4500 and m>1500:
      s2=s2+(m-1500)*0.1
   if m>9000:
      s3=s3+(9000-4500)*0.2
   elif m<9000 and m>4500:
      s3=s3+(m-4500)*0.2
   if m>35000:
      s4=s4+(35000-9000)*0.25
   elif m<35000 and m>9000:
      s4=s4+(m-9000)*0.25
   if m>55000:
      s5=s5+(55000-35000)*0.3
   elif m<55000 and m>35000:
      s5=s5+(m-35000)*0.3
   if m>80000:
      s6=s6+(80000-55000)*0.35+(m-80000)*0.45
   elif m<80000 and m>55000:
      s6=s6+(m-55000)
   print(s1+s2+s3+s4+s5+s6)
else:
   print('no tax')

Running Results:
8045.0

第11题 分糖果

Question:
10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。
然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块?
Python Code:

list1=[12,2,8,22,16,4,10,6,14,20]
list2=[12,2,8,22,16,4,10,6,14,20]
count=1

while count<20:

   for i in range(len(list1)):
      if i==0:
         list2[i]=int(list1[i]/2+list1[len(list1)-1]/2)
         #print(list2)
      else:
         list2[i]=int(list1[i]/2+list1[i-1]/2)

   for i in range(len(list1)):
      if list2[i]%2==1:
         list2[i]=list2[i]+1

   for i in range(len(list1)):
      list1[i]=list2[i]
      
   print(list1)

   equal=0
   for i in range(len(list1)):
      if list1[0]==list2[i]:
         equal=equal+1
         
   if equal==len(list1):
      print('经过',count,'次传送','大家手中糖果数一样,为',list1[0],'颗')
      #print(count,list[0])
      break
   
   count=count+1

Running Results:
[16, 8, 6, 16, 20, 10, 8, 8, 10, 18]
[18, 12, 8, 12, 18, 16, 10, 8, 10, 14]
[16, 16, 10, 10, 16, 18, 14, 10, 10, 12]
[14, 16, 14, 10, 14, 18, 16, 12, 10, 12]
[14, 16, 16, 12, 12, 16, 18, 14, 12, 12]
[14, 16, 16, 14, 12, 14, 18, 16, 14, 12]
[14, 16, 16, 16, 14, 14, 16, 18, 16, 14]
[14, 16, 16, 16, 16, 14, 16, 18, 18, 16]
[16, 16, 16, 16, 16, 16, 16, 18, 18, 18]
[18, 16, 16, 16, 16, 16, 16, 18, 18, 18]
[18, 18, 16, 16, 16, 16, 16, 18, 18, 18]
[18, 18, 18, 16, 16, 16, 16, 18, 18, 18]
[18, 18, 18, 18, 16, 16, 16, 18, 18, 18]
[18, 18, 18, 18, 18, 16, 16, 18, 18, 18]
[18, 18, 18, 18, 18, 18, 16, 18, 18, 18]
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
经过 16 次传送 大家手中糖果数一样,为 18 颗

第12题 三色球

Question:
一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?
Python Code:

for r in range(4):
   for w in range(4):
      for b in range(7):
         if r+w+b==8:
            print('red:',r,'white:',w,'blue:',b)

Running Results:
red: 0 white: 2 blue: 6
red: 0 white: 3 blue: 5
red: 1 white: 1 blue: 6
red: 1 white: 2 blue: 5
red: 1 white: 3 blue: 4
red: 2 white: 0 blue: 6
red: 2 white: 1 blue: 5
red: 2 white: 2 blue: 4
red: 2 white: 3 blue: 3
red: 3 white: 0 blue: 5
red: 3 white: 1 blue: 4
red: 3 white: 2 blue: 3
red: 3 white: 3 blue: 2

第13题 出售金鱼

Question:
小明将养的一缸金鱼分五次出售:第一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问原来的鱼缸中共有几条金鱼?
Python Code:

n=11
x=1
while x==1:
   a=n-(n/2+1/2)
   b=a-(a/3+1/3)
   c=b-(b/4+1/4)
   d=c-(c/5+1/5)
   if d==11:
      print(n)
      break
   else:
      n=n+1

Running Results:
59

第14题 对称里程

Question:
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859,两个小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
Python Code:

def duichenshu(n):
   list1=[]
   a=0
   m=n
   while n!=0:
      list1.append(n%10)
      n=n//10
   for i in range(len(list1)//2):
      if list1[i]==list1[len(list1)-i-1]:
         a=a+1
   if a==len(list1)//2 and (m-95859)<300:
      print('miles:',m)
      print('speed:',m-95859)


for i in range(95860,97000):
   duichenshu(i)

Running Results:
miles: 95959
speed: 50.0
miles: 96069
speed: 105.0
miles: 96169
speed: 155.0
miles: 96269
speed: 205.0
miles: 96369
speed: 255.0

第15题 爱因斯坦的数学题

Question:
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在1到N内,有多少个数能满足?
Python Code:

for i in range(1,2000):
   if i%2==1 and i%3==2 and i%5==4 and i%6==5 and i%7==0:
      print('number of steps:',i)


for i in range(95860,97000):
   duichenshu(i)

Running Results:
number of steps: 119
number of steps: 329
number of steps: 539
number of steps: 749
number of steps: 959
number of steps: 1169
number of steps: 1379
number of steps: 1589
number of steps: 1799

第16题 谁知盘中餐粒粒皆辛苦

Question:
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8×8 共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请编程求出国王总共需要将多少麦子赏赐给他的宰相。
Python Code:

a=0
b=0
for i in range(65):
   a=a+2**i
   print('第',i,'格:',a)
   b=b+a
print('Total:',b)

Running Results:
第 0 格: 1
第 1 格: 3
第 2 格: 7
第 3 格: 15
第 4 格: 31
第 5 格: 63
第 6 格: 127
第 7 格: 255
第 8 格: 511
第 9 格: 1023
第 10 格: 2047
第 11 格: 4095
第 12 格: 8191
第 13 格: 16383
第 14 格: 32767
第 15 格: 65535
第 16 格: 131071
第 17 格: 262143
第 18 格: 524287
第 19 格: 1048575
第 20 格: 2097151
第 21 格: 4194303
第 22 格: 8388607
第 23 格: 16777215
第 24 格: 33554431
第 25 格: 67108863
第 26 格: 134217727
第 27 格: 268435455
第 28 格: 536870911
第 29 格: 1073741823
第 30 格: 2147483647
第 31 格: 4294967295
第 32 格: 8589934591
第 33 格: 17179869183
第 34 格: 34359738367
第 35 格: 68719476735
第 36 格: 137438953471
第 37 格: 274877906943
第 38 格: 549755813887
第 39 格: 1099511627775
第 40 格: 2199023255551
第 41 格: 4398046511103
第 42 格: 8796093022207
第 43 格: 17592186044415
第 44 格: 35184372088831
第 45 格: 70368744177663
第 46 格: 140737488355327
第 47 格: 281474976710655
第 48 格: 562949953421311
第 49 格: 1125899906842623
第 50 格: 2251799813685247
第 51 格: 4503599627370495
第 52 格: 9007199254740991
第 53 格: 18014398509481983
第 54 格: 36028797018963967
第 55 格: 72057594037927935
第 56 格: 144115188075855871
第 57 格: 288230376151711743
第 58 格: 576460752303423487
第 59 格: 1152921504606846975
第 60 格: 2305843009213693951
第 61 格: 4611686018427387903
第 62 格: 9223372036854775807
第 63 格: 18446744073709551615
第 64 格: 36893488147419103231
Total: 73786976294838206397

第17题 完数

Question:
求某一范围内完数的个数。如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完数”。
Python Code:

def wanshu(a):
   list1=[]
   b=0
   for i in range(1,int(a/2+1)):
      if a%i==0:
         list1.append(i)
   for j in range(0,len(list1)):
      b=b+list1[j]
   if b==a:
      print('%d='%a,end='')       
      for k in range(len(list1)-1):
         print(list1[k],end='+')
      print(list1[len(list1)-1])


for m in range(1,10000):
   wanshu(m)

Running Results:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064

第18题 亲密数

Question:
如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
Python Code:

def qinmishu(a):
   list1=[]
   for i in range(1,int(a/2)+1):
      if a%i==0:
         list1.append(i)
##   print(list1)
   m=0
   for j in range(len(list1)):      
      m=m+list1[j]
##   print(m)
   list2=[]
   n=0
   for k in range(1,int(m/2)+1):
      if m%k==0:
         list2.append(k)
##   print(list2)      
   for l in range(len(list2)):
      n=n+list2[l]
##   print(n)   
   if n==a and m!=n:       
      return a,m
   else:
      return 0,0       


list3=[]
for x in range(220,10000): 
   p,q=qinmishu(x)
   if p+q!=0:
##      list3.append(p+q)
      if len(list3)!=0:
##         print(list3)
         if list3.count(p+q)==0:
            list3.append(p+q)
            print(p,q)
      else:
         print(p,q)
         list3.append(p+q)

Running Results:
220 284
1184 1210
2620 2924
5020 5564
6232 6368

第19题 自守数

Question:
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:52 = 25 252 = 625 762 = 5776 93762 = 87909376,求100000以内的自守数。
Python Code:

import time
start=time.time()


def zishoushu(a):
   b=a       
   list1=[]
   while a>0:
      list1.append(a%10)
      a=a//10
   c=pow(b,2)
   list2=[]
   j=0
   while c>0:
      list2.append(c%10)       
      c=c//10
   for i in range(len(list1)):
      if list1[i]==list2[i]:
         j=j+1   
   if j==len(list1):
      print(b)       

def zishoushu1(a):
   b=a       
   list1=[]
   while a>0:
      list1.append(a%10)
      a=a//10
   c=pow(b,2)
   d=c%pow(10,len(list1))
   if d==b:
      print(b)

for x in range(1,1000000):
   zishoushu1(x)

end=time.time()
print(end-start)

Running Results:
1
5
6
25
76
376
625
9376
90625
109376
890625
7.59375

第20题 回文数

Question:
打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)
Python Code:

def huiwenshu(a):
   list1=[]
   c=a**2
   while c>=10:
      list1.append(c%10)
      c=c//10
   list1.append(c)
   n=len(list1)
   m=0
   for i in range(int(n/2)): 
      if list1[i]==list1[n-i-1]:
         m=m+1
   if m==int(n/2) and m!=0:
      print(a**2)     
      

for x in range(1,256):
   huiwenshu(x)

Running Results:
121
484
676
10201
12321
14641
40804
44944

第21题 水仙花数

Question:
出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33
Python Code:

def sxhs(n):
   x=n
   list1=[]
   a=0
   while n>0:
      list1.append(n%10)
      n=n//10
   for i in range(len(list1)):
      a=a+list1[i]**(len(list1))
   if a==x:
      print(x)
##   print(list1)
##   print(a)

for i in range(101,99999):
   sxhs(i)

Running Results:
153
370
371
407
1634
8208
9474
54748
92727
93084

第22题 高次方数的尾数

Question:
求13的13次方的最后三位数。
Python Code:

a=1
for i in range(1,14):
   a=(a*13)%1000
   print(a)
print(pow(13,13))

Running Results:
13
169
197
561
293
809
517
721
373
849
37
481
253
302875106592253

第23题 黑洞数

Question:
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。求四位黑洞数。(6174)
Python Code:

def sort(a):
   list1=[]
   list2=list1
   b=a
   while a>=1:       
      list1.append(a%10)      
      a=a//10
   for i in range(len(list2)):
      for j in range(i+1,len(list2)):
         if list2[i]<list2[j]:
            m=list2[i]
            list2[i]=list2[j]
            list2[j]=m
   n=0
   p=0
   for k in range(len(list2)):
      n=n+list2[k]*pow(10,len(list2)-1-k)
   for l in range(len(list2)):
      p=p+list2[l]*pow(10,l)       
   d=n-p
   print(n,'-',p,'=',d)
   return d

   
a=5671
b=0
while a!=b:
   b=a
   a=sort(a)

Running Results:
7651 - 1567 = 6084
8640 - 468 = 8172
8721 - 1278 = 7443
7443 - 3447 = 3996
9963 - 3699 = 6264
6642 - 2466 = 4176
7641 - 1467 = 6174
7641 - 1467 = 6174

第24题 勾股数

Question:
求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。
Python Code:

def HCF(a,b,c):
   d=min(a,b,c)
   list1=[]
   for i in range(1,d+1):
      if a%i==0 and b%i==0 and c%i==0:
         list1.append(i)
  # print(list1)
   return list1

for i in range(1,49):
   a=2*i+1
   b=2*i**2+2*i
   c=2*i**2+2*i+1
   #print(a,b,c)

   x=2*i
   y=i**2-1
   z=i**2+1
   list2=HCF(x,y,z)
   if i>2 and len(list2)==1:
      print(x,y,z)

Running Results:
8 15 17
12 35 37
16 63 65
20 99 101
24 143 145
28 195 197
32 255 257
36 323 325
40 399 401
44 483 485
48 575 577
52 675 677
56 783 785
60 899 901
64 1023 1025
68 1155 1157
72 1295 1297
76 1443 1445
80 1599 1601
84 1763 1765
88 1935 1937
92 2115 2117
96 2303 2305

第25题 不重复的三位数

Question:
1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
Python Code:

for i in range(1,5):
   for j in range(1,5):
      for k in range(1,5):
         if i!=j and i!=k and j!=k :
            print(i,j,k)

Running Results:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
Total numbers: 24

第26题 最大公约数和最小公倍数

Question:
求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)。
Python Code:

def GCD(a,b):
   c=min(a,b)
   list1=[]
   for i in range(1,c+1):
      if a%i==0 and b%i==0:
         list1.append(i)
   return list1

list2=GCD(12,100)
print('max GCD is:',list2[len(list2)-1])


def LCM(a,b):
   d=1
   c=max(a,b)
   while d==1:
      if c%a==0 and c%b==0:
         break
      c=c+1
   return c
      
g=LCM(12,19)
print('min LCM is:',g)

Running Results:
max GCD is: 4
min LCM is: 228

第27题 评委打分

Question:
10个评委打分,去掉一个最低分和一个最高分,输出平均分。
Python Code:

list1=[90,12,89,38,29,99,100,37,45,67]

a=0
print(list1)
list1.remove(max(list1))
list1.remove(min(list1))
print(list1)
for i in range(len(list1)):
   a=a+list1[i]
print('Average Score is: ',a/len(list1))

Running Results:
[90, 12, 89, 38, 29, 99, 100, 37, 45, 67]
[90, 89, 38, 29, 99, 37, 45, 67]
Average Score is: 61.75

第28题 埃及分数

Question:
所谓埃及分数,是指分子为1 的分数。任何一个分数都可以表示为埃及分数之和的形式。如2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。然而,一个分数的表示方式是不唯一的,加数少的比加数多的好,加数个数相同的,最小的分数越大越好。如果最小的相同,则比较次小的,依次类推。编程求任意分数的埃及分数分解。
Python Code:

def egypt(a,b):
	"""a/b=1/(q+1)+(a-r)/b(q+1)"""
	assert a<b
	while b%a != 0:
		q, r = b//a, b%a 
		a -= r
		b *= (q+1)
		yield q+1
	yield int(b/a)

print(list(egypt(11,17)))

Running Results:
[2, 7, 238]

备注:
11/17=1/2+1/7+1/238

第29题 九九乘法表(自定义乘法表)

Question:
打印九九乘法表;
或者输入一个数字,按照九九乘法表的格式打印指定阶数的乘法表。
Python Code:

#九九乘法表
for y in range(1,10):
   print(y,'  ',end='  ')
   for x in range(1,y+1):
      if x*y<=9:
         if y==1:
            print("%s*%s=%s"%(x,y,x*y),end='  ')
         else:
            print("%s*%s=%s"%(x,y,x*y),end='   ')
      if x*y>9:
         print("%s*%s=%s"%(x,y,x*y),end='  ')

   print(end='\n')

###############################
#指定阶数乘法表
print('\n','\n','                  指定阶数乘法表','\n')
print('lyy'.rjust(79))

a=eval(input('请输入乘法表的阶数:'))
a=int(a)

for y in range(1,a+1):   
   print(y,' ',end='  ')
   for x in range(1,y+1):
      if x*y<=9:
         if y==1:
            print("%s*%s=%s"%(x,y,x*y),end='  ')
         else:
            print("%s*%s=%s"%(x,y,x*y),end='   ')
      if x*y>9:
         print("%s*%s=%s"%(x,y,x*y),end='  ')

   print(end='\n')

Running Results:
指定阶数乘法表
lyy
请输入乘法表的阶数:9
1 11=1
2 1
2=2 22=4
3 1
3=3 23=6 33=9
4 14=4 24=8 34=12 44=16
5 15=5 25=10 35=15 45=20 55=25
6 1
6=6 26=12 36=18 46=24 56=30 66=36
7 1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
8 18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
9 19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81

第30题 四方定理

Question:
四方定理是众所周知的:任意一个正整数n,可以分解为不超过四个整数的平方和。例如:25=12+22+22+42,编程将指定整数分解成四个整数的平方和。
Python Code:

n=23
n_range=int(n**0.5)
count=0

for a in range(n_range):
   for b in range(n_range):
      for c in range(n_range):
         for d in range(n_range):
            if a**2+b**2+c**2+d**2==n:
               print(a,b,c,d,sep='^2+',end='')
               print('^2=',n)
               count=count+1

if count==0:
   print('No solve')

Running Results:
12+22+32+32= 23
12+32+22+32= 23
12+32+32+22= 23
22+12+32+32= 23
22+32+12+32= 23
22+32+32+12= 23
32+12+22+32= 23
32+12+32+22= 23
32+22+12+32= 23
32+22+32+12= 23
32+32+12+22= 23
32+32+22+12= 23

第31题 素数差之和

Question:
2000以内的素数,2,3,5,7… 将其中相邻两项做差,得到新数列 1,2,2,4,2… 试问:这些数中,是否存在某一项加到某一项,使其和为1898?
Python Code:

num=[]
for i in range(2,1993):
   j=2
   for j in range(2,i):
      if i%j==0:
         break
   else:
      num.append(i)

diff=[]
for k in range(len(num)-1):
   diff.append(num[k+1]-num[k])

count=0

for m in range(len(diff)):
   a=0
   for n in range(m,len(diff)):
      a=diff[n]+a
      if a==1898:
         for p in range(m,n-1):
            print(diff[p],end='+')
         print(diff[n-1],'=1898')
         count=count+1

if count==0:
   print('No Result')

Running Results:
2+2+4+2+4+2+4+6+2+6+4+2+4+6+6+2+6+4+2+6+4+6+8+4+2+4+2+4+14+4+6+2+10+2+6+6+4+6+6+2+10+2+4+2+12+12+4+2+4+6+2+10+6+6+6+2+6+4+2+10+14+4+2+4+14+6+10+2+4+6+8+6+6+4+6+8+4+8+10+2+10+2+6+4+6+8+4+2+4+12+8+4+8+4+6+12+2+18+6+10+6+6+2+6+10+6+6+2+6+6+4+2+12+10+2+4+6+6+2+12+4+6+8+10+8+10+8+6+6+4+8+6+4+8+4+14+10+12+2+10+2+4+2+10+14+4+2+4+14+4+2+4+20+4+8+10+8+4+6+6+14+4+6+6+8+6+12+4+6+2+10+2+6+10+2+10+2+6+18+4+2+4+6+6+8+6+6+22+2+10+8+10+6+6+8+12+4+6+6+2+6+12+10+18+2+4+6+2+6+4+2+4+12+2+6+34+6+6+8+18+10+14+4+2+4+6+8+4+2+6+12+10+2+4+2+4+6+12+12+8+12+6+4+6+8+4+8+4+14+4+6+2+4+6+2+6+10+20+6+4+2+24+4+2+10+12+2+10+8+6+6+6+18+6+4+2+12+10+12+8+16+14+6+4+2+4+2+10 =1898
6+2+6+4+2+6+4+6+8+4+2+4+2+4+14+4+6+2+10+2+6+6+4+6+6+2+10+2+4+2+12+12+4+2+4+6+2+10+6+6+6+2+6+4+2+10+14+4+2+4+14+6+10+2+4+6+8+6+6+4+6+8+4+8+10+2+10+2+6+4+6+8+4+2+4+12+8+4+8+4+6+12+2+18+6+10+6+6+2+6+10+6+6+2+6+6+4+2+12+10+2+4+6+6+2+12+4+6+8+10+8+10+8+6+6+4+8+6+4+8+4+14+10+12+2+10+2+4+2+10+14+4+2+4+14+4+2+4+20+4+8+10+8+4+6+6+14+4+6+6+8+6+12+4+6+2+10+2+6+10+2+10+2+6+18+4+2+4+6+6+8+6+6+22+2+10+8+10+6+6+8+12+4+6+6+2+6+12+10+18+2+4+6+2+6+4+2+4+12+2+6+34+6+6+8+18+10+14+4+2+4+6+8+4+2+6+12+10+2+4+2+4+6+12+12+8+12+6+4+6+8+4+8+4+14+4+6+2+4+6+2+6+10+20+6+4+2+24+4+2+10+12+2+10+8+6+6+6+18+6+4+2+12+10+12+8+16+14+6+4+2+4+2+10+12+6+6+18+2+16 =1898
8+4+2+4+2+4+14+4+6+2+10+2+6+6+4+6+6+2+10+2+4+2+12+12+4+2+4+6+2+10+6+6+6+2+6+4+2+10+14+4+2+4+14+6+10+2+4+6+8+6+6+4+6+8+4+8+10+2+10+2+6+4+6+8+4+2+4+12+8+4+8+4+6+12+2+18+6+10+6+6+2+6+10+6+6+2+6+6+4+2+12+10+2+4+6+6+2+12+4+6+8+10+8+10+8+6+6+4+8+6+4+8+4+14+10+12+2+10+2+4+2+10+14+4+2+4+14+4+2+4+20+4+8+10+8+4+6+6+14+4+6+6+8+6+12+4+6+2+10+2+6+10+2+10+2+6+18+4+2+4+6+6+8+6+6+22+2+10+8+10+6+6+8+12+4+6+6+2+6+12+10+18+2+4+6+2+6+4+2+4+12+2+6+34+6+6+8+18+10+14+4+2+4+6+8+4+2+6+12+10+2+4+2+4+6+12+12+8+12+6+4+6+8+4+8+4+14+4+6+2+4+6+2+6+10+20+6+4+2+24+4+2+10+12+2+10+8+6+6+6+18+6+4+2+12+10+12+8+16+14+6+4+2+4+2+10+12+6+6+18+2+16+2+22+6 =1898

第32题 分解质因数

Question:
将指定范围的正整数分解成质因数之积。
Python Code:

def primefactor(n):
   list1=[]
   list2=[]
   y=n
   for i in range(2,1000):
      j=2
      for j in range(2,i):
         if i%j==0:
            break
      else:
         list1.append(i)
   
   for m in range(len(list1)):
      while n%list1[m]==0:
         n=n/list1[m]
         list2.append(list1[m])
   print(y,end='=')
   for x in range(len(list2)-1):
      print(list2[x],end='*')
   print(list2[len(list2)-1])
   

primefactor(240)

for k in range(240,251):
   primefactor(k)

Running Results:
240=22223*5

240=222235
241=241
242=2
1111
243=3
3333
244=2
261
245=5
77
246=2
341
247=13
19
248=22231
249=3
83
250=255*5

第33题 画樱花树

Question:
用Turtle画出一颗樱花树。
Python Code:

from turtle import *
from random import *
from math import *
 
def tree(n, l):
    pd() # 下笔
    # 阴影效果
    t = cos(radians(heading() + 45)) / 8 + 0.25
    pencolor(t, t, t)
    pensize(n / 3)
    forward(l) # 画树枝
 
 
    if n > 0:
        b = random() * 15 + 10 # 右分支偏转角度
        c = random() * 15 + 10 # 左分支偏转角度
        d = l * (random() * 0.25 + 0.7) # 下一个分支的长度
        # 右转一定角度,画右分支
        right(b)
        tree(n - 1, d)
        # 左转一定角度,画左分支
        left(b + c)
        tree(n - 1, d)
 
        # 转回来
        right(c)
    else:
        # 画叶子
        right(90)
        n = cos(radians(heading() - 45)) / 4 + 0.5
        pencolor(n, n*0.8, n*0.8)
        circle(3)
        left(90)
 
        # 添加0.7倍的飘落叶子
##        if(random() > 0.3):
##            pu()
##            # 飘落
##            t = heading()
##            an = -40 + random()*40
##            setheading(an)
##            dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
##            forward(dis)
##            setheading(t)
## 
## 
##            # 画叶子
##            pd()
##            right(90)
##            n = cos(radians(heading() - 45)) / 4 + 0.5
##            pencolor(n*0.5+0.5, 0.4+n*0.4, 0.4+n*0.4)
##            circle(2)
##            left(90)
##            pu()
## 
##            #返回
##            t = heading()
##            setheading(an)
##            backward(dis)
##            setheading(t)
 
    pu()
    backward(l)# 退回
 
bgcolor(0.5, 0.5, 0.5) # 背景色
ht() # 隐藏turtle
speed(1) # 速度,1-10渐进,0最快
tracer(0, 0)
pu() # 抬笔
backward(100)
left(90) # 左转90度
pu() # 抬笔
backward(300) # 后退300
tree(12,100) # 递归12层
done()

Running Results:
Python 初学者趣味练习题汇编(共42题,中文版)_第1张图片

备注:
该代码来源于网络,链接地址:
https://blog.csdn.net/weixin_43943977/article/details/102691392

第34题 角谷猜想

Question:
角谷静夫是日本的一位著名学者,他提出了一个猜想(称为角谷猜想):对于一个正整数n,若为偶数则除以2,若为奇数则乘以3加1,得到一个新的数后按照之前的两条规则继续演算,若干次后得到的结果必然为1。输入任一正整数,输出演算过程。
Python Code:

a=1
i=0
j=0
n=9
list1=[32,65,4,76,22,3,123,456,1235,5,8,20]

def Jiaogu(num):
   n=num
   i=0
   j=0
   a=1
   while a==1:
      if n==1:
         print('%d经过%d次除2,%d次乘3加1,结果为1'%(num,i,j))
         break
      else:
         if n%2==0:
##            print('%d/2=%d'%(n,n/2))
            n=n/2
            i=i+1
         else:
##            print('%d*3+1=%d'%(n,n*3+1))
            n=n*3+1
            j=j+1
      
for m in range(len(list1)):
   Jiaogu(list1[m])

Running Results:
32经过5次除2,0次乘3加1,结果为1
65经过19次除2,8次乘3加1,结果为1
4经过2次除2,0次乘3加1,结果为1
76经过16次除2,6次乘3加1,结果为1
22经过11次除2,4次乘3加1,结果为1
3经过5次除2,2次乘3加1,结果为1
123经过31次除2,15次乘3加1,结果为1
456经过25次除2,10次乘3加1,结果为1
1235经过85次除2,47次乘3加1,结果为1
5经过4次除2,1次乘3加1,结果为1
8经过3次除2,0次乘3加1,结果为1
20经过6次除2,1次乘3加1,结果为1

第35题 谢尔宾斯基三角形

Question:
绘制渐变彩虹色谢尔宾斯基三角形。
Python Code:

import turtle
import random


def xebsj(x,y):
   xa=250
   ya=-250
   xb=-250
   yb=-250
   xc=0
   yc=250*pow(3,1/2)-250

   n=random.randint(1,3)
   if n==1:
      turtle.penup()
      turtle.goto(1/2*(xa+x),1/2*(ya+y))
      turtle.pencolor(color_list[int((1/2*(xa+x)+250)*3)])
      turtle.pendown()
      turtle.dot(3)
      return 1/2*(xa+x),1/2*(ya+y)
   if n==2:
      turtle.penup()
      turtle.goto(1/2*(xb+x),1/2*(yb+y))
      turtle.pencolor(color_list[int((1/2*(xb+x)+250)*3)])
      turtle.pendown()
      turtle.dot(3)
      return 1/2*(xb+x),1/2*(yb+y)
   if n==3:
      turtle.penup()
      turtle.goto(1/2*(xc+x),1/2*(yc+y))
      turtle.pencolor(color_list[int((1/2*(xc+x)+250)*3)])
      turtle.pendown()
      turtle.dot(3)
      return 1/2*(xc+x),1/2*(yc+y)


turtle.colormode(255)
color_list = []

   #从赤到黄
for g in range(0,256):
   color_list.append((255,g,0))

   #从黄到绿
for r in range(255,-1,-1):
   color_list.append((r,255,0))

#从绿到青
for b in range(0,256):
   color_list.append((0,255,b))

#从青到蓝
for g in range(255,-1,-1):
   color_list.append((0,g,255))

#从蓝到紫
for r in range(0,256):
   color_list.append((r,0,255))

#从紫到红
for b in range(255,-1,-1):
   color_list.append((255,0,b))

turtle.speed(0)
turtle.tracer(False)
turtle.penup()
turtle.goto(-250,-250)
turtle.pendown()
turtle.forward(500)
turtle.left(120)
turtle.forward(500)
turtle.left(120)
turtle.forward(500)

def ran():
   c=0
   while c==0:
      a=random.randint(-250,250)
      b=random.randint(-250,int(250*pow(3,1/2)-250))
      if a>=0 and b<int(-pow(3,1/2)*a+250*pow(3,1/2)-250):
         print(a,b)
         c=1
      elif a<0 and b<int(pow(3,1/2)*a+250*pow(3,1/2)-250):
         print(a,b)
         c=1
   return(a,b)
   
   
a,b=ran()
for i in range(10000):
##   ran()
   a,b=xebsj(a,b)

turtle.tracer(True)
turtle.done()

Running Results:
Python 初学者趣味练习题汇编(共42题,中文版)_第2张图片

第36题 螺旋

Question:
绘制彩色螺旋图案。
Python Code:

import turtle
import time
turtle.pensize(2)
turtle.bgcolor("black")
colors = ["red", "yellow",'purple','blue']
turtle.speed(0)
turtle.tracer(False)
for x in range(500):
    turtle.forward(2*x)
    turtle.color(colors[x%4])
    turtle.left(91)
turtle.tracer(True)

Running Results:
Python 初学者趣味练习题汇编(共42题,中文版)_第3张图片

第37题 随机图形

Question:
随机绘制圆形、矩形和三角形。
Python Code:

import turtle
import random

turtle.speed(0)
def tri(a):
   for i in range(3):
      turtle.forward(a)
      turtle.right(120)

def rect(b):
   for i in range(4):
      turtle.forward(b)
      turtle.right(90)

def circle(c):
   turtle.circle(c)

def go():
   x=random.randint(-200,200)
   y=random.randint(-200,200)
   turtle.penup()
   turtle.goto(x,y)
   turtle.pendown()


i=0
x=random.randint
while i<20:
   tri(random.randint(10,120))
   go()
   rect(random.randint(10,120))
   go()
   circle(random.randint(10,120))
   go()
   i=i+1

Running Results:
Python 初学者趣味练习题汇编(共42题,中文版)_第4张图片

第38题 彩虹方块

Question:
绘制彩虹方块。
Python Code:

##赤色 【RGB】255, 0, 0 赤—橙 165次
##橙色 【RGB】 255, 165, 0  橙—黄 90次
##黄色 【RGB】255, 255, 0 黄—绿  255次
##绿色 【RGB】0, 255, 0 绿—青 255
##青色 【RGB】0, 255, 255  青—蓝  255
##蓝色 【RGB】0, 0, 255 蓝—紫  139
##紫色 【RGB】139, 0, 255   1159

import turtle
#import random
color_list = []

#从赤到黄
for g in range(0,256):
   color_list.append((255,g,0))

#从黄到绿
for r in range(255,-1,-1):
   color_list.append((r,255,0))

#从绿到青
for b in range(0,256):
   color_list.append((0,255,b))

#从青到蓝
for g in range(255,-1,-1):
   color_list.append((0,g,255))

#从蓝到紫
for r in range(0,256):
   color_list.append((r,0,255))

#从紫到红
for b in range(255,-1,-1):
   color_list.append((255,0,b))

turtle.colormode(255)
turtle.speed(0)

for i in range(360):
   turtle.setheading(i)
   turtle.pencolor(color_list[int(i/360*1530)])
   for j in range(4):
      turtle.forward(100)
      turtle.left(90)

Running Results:
Python 初学者趣味练习题汇编(共42题,中文版)_第5张图片

第39题 猜数

Question:
编制一个程序猜数,输入数字后反馈大了或者小了,直至猜中,并反馈一共猜了多少次。
Python Code:

i=1
import random
n=random.randint(0,999)
guess=eval(input('请猜一个0—999的整数:'))
while guess!=n:
   if guess>n and guess<999:
      print('大了')
      guess=eval(input('请再猜:'))
   elif guess>999:
      print('超出范围')
      guess=eval(input('请再猜:'))
   elif guess<n:
      print('小了')
      guess=eval(input('请再猜:'))
   i=i+1
if guess==n:
   print("猜对了,一共猜了%d次,呵呵"%(i))

Running Results:
请猜一个0—999的整数:43
小了
请再猜:123
小了
请再猜:500
小了
请再猜:750
大了
请再猜:635
小了
请再猜:700
小了
请再猜:725
小了
请再猜:735
小了
请再猜:745
猜对了,一共猜了9次,呵呵

第40题 统计单词数及字符数

Question:
输入一段英文段落,统计该段落中含有的单词数和各字母数。
Python Code:

a=input('请输入文本:')
i=0
space=0

while i<len(a):
   w=a[i]
   i=i+1
   if w.isspace():
      space=space+1
print('单词数:',space+1)

str=a
resoult={
     }
for j in str:
    resoult[j]=str.count(j)
print(resoult)

Running Results:
请输入文本:i am liuyuanyuan
单词数: 3
{‘a’: 3, ‘m’: 1, ‘y’: 2, ‘u’: 3, ‘n’: 2, ’ ': 2, ‘l’: 1, ‘i’: 2}

第41题 算24

Question:
输入四个数,通过加减乘除算出24。
Python Code:

def operator(x,y,op):
   if op==1:
      return x+y
   if op==2:
      return x-y
   if op==3:
      return x*y
   if op==4 and y!=0:
      return x/y
   else:
      return 909
      
def p(a,b,c,d):
   OP=[' ','+','-','×','÷']
   for i in range(1,5):
      for j in range(1,5):
         for k in range(1,5):
            if abs(operator(operator(operator(a,b,i),c,j),d,k)-24)<0.001:
               print('(','(',a,OP[i],b,')',OP[j],c,')',OP[k],d,'=24')
            if abs(operator(operator(a,operator(b,c,j),i),d,k)-24)<0.001:
               print('(',a,OP[i],'(',b,OP[j],c,')',')',OP[k],d,'=24')
            if abs(operator(a,operator(b,operator(c,d,k),j),i)-24)<0.001:
               print(a,OP[i],'(',b,OP[j],'(',c,OP[k],d,')',')','=24')
            if abs(operator(a,operator(operator(b,c,j),d,k),i)-24)<0.001:
               print(a,OP[i],'(','(',b,OP[j],c,')',OP[k],d,')','=24')
            if abs(operator(operator(a,b,i),operator(c,d,k),j)-24)<0.001:
               print('(',a,OP[i],b,')',OP[j],'(',c,OP[k],d,')','=24')

list1=[6,9,9,10]
          ##10道24点难题,可以用来测试
          ##2,2,2,9
          ##2,7,8,9
          ##1,2,7,7
          ##4,4,10,10
          ##6,9,9,10
          ##1,5,5,5
          ##2,5,5,10
          ##1,4,5,6
          ##3,3,7,7
          ##3,3,8,8
list2=[]
for ax in range(4):
   for bx in range(4):
      for cx in range(4):
         for dx in range(4):
            if ax!=bx and ax!=cx and ax!=dx and bx!=cx and bx!=dx and cx!=dx and \
            list2.count((list1[ax]*3)+(list1[bx]*5)-(list1[cx]*7)+(list1[dx]*11))==0:
               p(list1[ax],list1[bx],list1[cx],list1[dx])
               #print(list1[ax],list1[bx],list1[cx],list1[dx])
               list2.append((list1[ax]*3)+(list1[bx]*5)-(list1[cx]*7)+(list1[dx]*11))
               #print(list2)
   

Running Results:
( ( 9 ÷ 6 ) × 10 ) + 9 =24
( 9 ÷ ( 6 ÷ 10 ) ) + 9 =24
9 + ( ( 9 ÷ 6 ) × 10 ) =24
9 + ( 9 ÷ ( 6 ÷ 10 ) ) =24
9 + ( 9 × ( 10 ÷ 6 ) ) =24
9 + ( ( 9 × 10 ) ÷ 6 ) =24
9 + ( ( 10 ÷ 6 ) × 9 ) =24
9 + ( 10 ÷ ( 6 ÷ 9 ) ) =24
( ( 9 × 10 ) ÷ 6 ) + 9 =24
( 9 × ( 10 ÷ 6 ) ) + 9 =24
9 + ( 10 × ( 9 ÷ 6 ) ) =24
9 + ( ( 10 × 9 ) ÷ 6 ) =24
( ( 10 ÷ 6 ) × 9 ) + 9 =24
( 10 ÷ ( 6 ÷ 9 ) ) + 9 =24
( ( 10 × 9 ) ÷ 6 ) + 9 =24
( 10 × ( 9 ÷ 6 ) ) + 9 =24

==================
2 + ( 2 × ( 2 + 9 ) ) =24
2 + ( ( 2 + 9 ) × 2 ) =24
2 + ( 2 × ( 9 + 2 ) ) =24
( 2 × ( 2 + 9 ) ) + 2 =24
2 + ( ( 9 + 2 ) × 2 ) =24
( ( 2 + 9 ) × 2 ) + 2 =24
( 2 × ( 9 + 2 ) ) + 2 =24
( ( 9 + 2 ) × 2 ) + 2 =24

==================
( 2 × ( 7 + 9 ) ) - 8 =24
( 2 × ( 9 + 7 ) ) - 8 =24
( ( 7 + 9 ) × 2 ) - 8 =24
( ( 9 + 7 ) × 2 ) - 8 =24

==================
( ( 7 × 7 ) - 1 ) ÷ 2 =24

==================
( ( 10 × 10 ) - 4 ) ÷ 4 =24

==================
( 5 - ( 1 ÷ 5 ) ) × 5 =24
5 × ( 5 - ( 1 ÷ 5 ) ) =24

==================
( 5 - ( 2 ÷ 10 ) ) × 5 =24
5 × ( 5 - ( 2 ÷ 10 ) ) =24

==================
4 ÷ ( 1 - ( 5 ÷ 6 ) ) =24
6 ÷ ( ( 5 ÷ 4 ) - 1 ) =24

==================
( 3 + ( 3 ÷ 7 ) ) × 7 =24
( ( 3 ÷ 7 ) + 3 ) × 7 =24
7 × ( 3 + ( 3 ÷ 7 ) ) =24
7 × ( ( 3 ÷ 7 ) + 3 ) =24

==================
8 ÷ ( 3 - ( 8 ÷ 3 ) ) =24

第42题 素数拼接

Question:
求出1000以内的所有素数,然后再判断这些素数中哪些是由素数拼接而成的,并打印出来,并统计个数。如:素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,因为有0。
Python Code:

def divide(a):
    list2=[]
    b=a
    while a!=0:
        list2.append(a%10)
        a=a//10
    list3=[2,3,5,7]
    x=0
    for i in range(len(list2)):
        if list3.count(list2[i])==1:
            x=x+1
    if x==len(list2):
        print(b)
        return 1
    else:
        return 0

list1=[]
for i in range(1,1000):
    j=2
    for j in range(2,i):
        if i%j==0:
            break
    else:
        list1.append(i)
k=0
for m in range(len(list1)):
    k=k+divide(list1[m])
    
    
print('total:',k)

Running Results:
2
3
5
7
23
37
53
73
223
227
233
257
277
337
353
373
523
557
577
727
733
757
773
total: 23

你可能感兴趣的:(Python)