Python经典编程30例.docx
- 文档编号:1208188
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:15
- 大小:53.23KB
Python经典编程30例.docx
《Python经典编程30例.docx》由会员分享,可在线阅读,更多相关《Python经典编程30例.docx(15页珍藏版)》请在冰豆网上搜索。
Python经典编程30例
Python经典编程30例
所有代码均在python3.7环境下调试通过,为了防止排版
原因导致不能正常运行,提供了正常运行情况下的代码截图
1、编写程序,求1~n之间的素数列表
defsushu(x):
i=0
foriinrange(2,x):
ifx%i==0:
returnFalsebreak
ifi+1==x:
returnTrue
returnFalsen=int(input("请输入n:
"))forjinrange(2,n):
ifsushu(j)==True:
print(j,"是素数")
2、编写程序,生成一个包括100个随机整数的列表,然后从后向前删除所有素数importrandomdefsushu(x):
i=0
foriinrange(2,x):
ifx%i==0:
returnFalsebreak
ifi+1==x:
returnTrue
returnFalse
s=[]
i=0foriinrange(0,30):
s.append(random.randint(1,10000))
foriinrange(0,30):
print(s[i],"",end='')ifi%10==0:
print("\n")print("\n")print("T列表")t=[]forjinrange(29,0,-1):
ifsushu(s[j])==False:
t.append(s[j])foriinrange(0,len(t)-1):
print(t[i],"",end='')ifi%10==0:
print("\n")
3、编写程序,当用户从键盘输入整数后,对其进行因式分解(即素数的积)。
如100=2*2*5*5
n=int(input("请输入待分解的整数n=?
"))
x=1
flag=True
ifn>1000:
#判断大于1000的数print("请输入不超过1000的整数")
ifn>1andn<=1000:
print("{}=".format(n),end='')whilen!
=1:
x+=1whilen%x==0:
n/=x
ifflag:
flag=Falseprint(x,end='')
else:
print("*{}".format(x),end='')
elifn==1:
print("1=1")
elifn==0:
print("0=0")
4、编写程序,验证100以内整数的哥德巴赫的猜想:
任何一个充分大的偶数(大于等
于6)总可以表示成两个素数之和。
如10=5+5,12=5+7
defisprime(x):
ifx==2:
returnTrue
ifx%2==0:
returnFalse
n=3whilen*n<=x:
ifx%n==0:
returnFalsen+=2returnTruedefgedb(x):
ifx<4orx%2!
=0:
print("输入的数据不正确,应该是大于或等于4的偶数")return
ifx==4:
print('4=2+2')returnforninrange(3,x,2):
ifisprime(n)andisprime(x-n):
print(x,'=',n,'+',x-n)
return
defmain():
x=int(input("输入大于或等于4的偶数"))gedb(x)
main()
5、编写程序,输出所有由1、2、3、4这4个数字组成的素数,并且在每个素数中每个数字只使用一次。
defisprime(x):
ifx==2:
returnTrueifx%2==0:
returnFalsen=3whilen*n<=x:
ifx%n==0:
returnFalse
n+=2returnTruedefexercise3_5():
s=0foriinrange(1,5):
forjinrange(1,5):
forkinrange(1,5):
forlinrange(1,5):
if(i!
=j)and(i!
=k)and(i!
=l)and(j!
=k)and(j!
=l)and(k!
=l):
s=i*1000+j*100+k*10+lifisprime(s)==True:
print(s)
exercise3_5()
6、编写程序,求所有水仙花数。
水仙花数是指一个三位数,其个位、十位、百位3个
数字的立方和等于这个数本身。
并断定有没有四位数的水仙花数?
t=0
s=0#统计水仙花数的个数
foriinrange(100,1000):
j=int(i/100)
k=int((i-100*j)/10)
l=i-j*100-k*10
ifi==j*j*j+k*k*k+l*l*l:
print(i)
s+=1
print(s)
foriinrange(1000,10000):
j=int(i/1000)
k=int((i-1000*j)/100)
l=int((i-j*1000-k*100)/10)
m=i-1000*j-100*k-10*l
ifi==j*j*j+k*k*k+l*l*l+m*m*m:
t+=1
print(i)
ift==0:
print("Nosuchnumber")
7、编写程序,生成一个包含100个随机数的列表,然后运用切片方法对其中偶数下标的元素进行降序排列,奇数下标的元素不变。
解法一:
importrandom
list_1=[]
#生成随机整数列表
foriinrange(20):
list_1.append(random.randint(0,100))
print('生成的列表为:
',list_1)#从首位开始索引下标为偶数位元素foriinrange(0,len(list_1),2):
#从上一个偶数位的下一个偶数位元素开始索引
foruinrange((i+2),len(list_1),2):
#防止索引超出范围
ifi #比较索引元素大小 iflist_1[i]<=list_1[u]: #互换元素位置list_t=list_1[i]list_1[i]=list_1[u]list_1[u]=list_tprint('排序后列表为: ',list_1) 解法2: importrandomrandom.seed()lst=[random.randint(0,101)foriinrange(20)]print(lst) defbubble_sort(lst): n=len(lst) foriinrange(n//2): forjinrange(0,n-i-2,2): iflst[j] lst[j],lst[j+2]=lst[j+2],lst[j]bubble_sort(lst)print(lst) 8、编写程序,输入行数,输出一个如下图所示的由“*”构成的等腰三角形(提示: 用 setw()函数)。 foriinrange(6): forkinrange(5-i): print("",end="") forjinrange(2*i+1): print("*",end="") print() 9、编写程序,A、B、C、D、E共5人夜里去捕鱼,很晚才各自找地方休息。 日上三竿,A 第1个醒来,他将鱼均分成5份,把多余的一条扔掉,拿走自己的一份。 B第2个醒来,他也将鱼均分成5份,将多余的1条扔掉,拿走自己的一份。 C、D、E如此类推。 问他们合伙至少捕了多少条鱼? 解法一 设总共捕了x条鱼,每个人看到的鱼共有Xn条,则: X1=x X2=(X1-1)/5*4 X3=(X2-1)/5*4 X4=(X3-1)/5*4 X5=(X4-1)/5*4 其中,(Xn-1)%5=0必定成立,即题中所提到的,扔掉一条,取五分之一。 那么就有x,使得递推所得到的项满足(Xn-1)%5=0即可。 deffish(n,x): if(x-1)%5==0: ifn==1: return1 else: returnfish(n-1,(x-1)/5*4) return0 x=6 whileTrue: x+=5 iffish(5,x)==1: print(x) break foriinrange(1,6): print("第{0}人看到的鱼有{1}条".format(i,x)) x=int((x-1)/5*4) 解法二反向递推法: 解决E和D的问题(规模为2),就可以解决D和C的问题,也就是E、D、C的问题(规模为3),最后解决所有问题。 由X(n+1)=(Xn-1)/5*4得,Xn=X(n+1)*5/4+1 fish=[0,0,0,0,1] i=0 whileTrue: fish[4]+=5 foriinrange(3,-2,-1): iffish[i+1]%4! =0: break fish[i]=int(fish[i+1]*5/4+1) iffish[i]%5! =1: break ifi==-1: break print("总共捕了",fish[0],"条鱼") foriinrange(0,5): print("第{0}人看到{1}条鱼".format(i+1,fish[i])) 10、编写程序,计算斐波拉契数列的后项与前项的比: 1/1,2/1,3/2,5/3,8/5,13/8, 第n项的值,并观察随着n的增加,比值趋向什么值? deffblq(x): ifx==1orx==2: return1 else: returnfblq(x-1)+fblq(x-2) forkinrange(1,30): print(fblq(k+1)/fblq(k)) 11、编写程序,计算卢卡斯数列的后项与前项的比: 1/2,3/1,4/3,7/4,11/7,18/11, 第n项的值,并观察随着n的增加,比值趋向什么值? 卢卡斯数列的定义为: L (1)=2,L (2)=1,L(n)=L(n-1)+L(n-2)(n>=2),前9个数为: 2、1、3、4、7、11、18、29、47 defLKS(x): ifx==1: return2 elifx==2: return1else: returnLKS(x-1)+LKS(x-2) forkinrange(1,30): print(LKS(k+1),"/",LKS(k),"=",LKS(k+1)/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 经典 编程 30