视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python经典编程30例
2025-09-29 16:29:14 责编:小OO
文档
Python经典编程30例

所有代码均在python3.7环境下调试通过,为了防止排版原因导致不能正常运行,提供了正常运行情况下的代码截图。

1、编写程序,求1~n之间的素数列表

def sushu(x):

n=int(input("请输入n:"))

for j in range(2,n):

 是素数")

2、编写程序,生成一个包括100个随机整数的列表,然后从后向前删除所有素数

import random

def sushu(x):

s=[]

i=0

for i in range(0,30):

for i in range(0,30):

print("\\n")

print("T列表")

t=[]

for j in range(29,0,-1):

for i in range(0,len(t)-1):

3、编写程序,当用户从键盘输入整数后,对其进行因式分解(即素数的积)。如100=2*2*5*5

n = int(input("请输入待分解的整数n=?"))

x = 1

flag = True

if n > 1000:#判断大于1000的数

 请输入不超过1000的整数")

if n > 1 and n <= 1000:

elif n == 1:

elif n == 0:

print("0=0")

4、编写程序,验证100以内整数的哥德的猜想:任何一个充分大的偶数(大于等于6)总可以表示成两个素数之和。如10=5+5, 12=5+7

def isprime(x):

def gedb(x):

 输入的数据不正确,应该是大于或等于4的偶数")

def main():

 输入大于或等于4的偶数"))

main()

5、编写程序,输出所有由1、2、3、4这4个数字组成的素数,并且在每个素数中每个数字只使用一次。

def isprime(x):

def exercise3_5():

exercise3_5()

6、编写程序,求所有水仙花数。水仙花数是指一个三位数,其个位、十位、百位3个数字的立方和等于这个数本身。并断定有没有四位数的水仙花数?

t=0

s=0 #统计水仙花数的个数

for i in range(100,1000):

print(s)

for i in range(1000,10000):

if t==0:

7、编写程序,生成一个包含100个随机数的列表,然后运用切片方法对其中偶数下标的元素进行降序排列,奇数下标的元素不变。

解法一:

import random

list_1=[]

#生成随机整数列表

for i in range(20):

 生成的列表为:',list_1)

 从首位开始索引下标为偶数位元素

for i in range(0,len(list_1),2):

 从上一个偶数位的下一个偶数位元素开始索引

 防止索引超出范围

 比较索引元素大小

 互换元素位置

print('排序后列表为:',list_1)

解法2:

import random

random.seed()

lst=[random.randint(0,101) for i in range(20)]

print(lst)

def bubble_sort(lst):

bubble_sort(lst)

print(lst)

8、编写程序,输入行数,输出一个如下图所示的由“*”构成的等腰三角形(提示:用setw()函数)。

for i in range(6):

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即可。

def fish(n, x):

x = 6

while True:

for i in range(1, 6):

 第{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

while True:

print("总共捕了",fish[0],"条鱼")

for i in range(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的增加,比值趋向什么值?

def fblq(x):

for k in range(1,30):

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

def LKS(x):

for k in range(1,30):

12、编写函数,用于判断输入的字符串是否由字母和数字构成,并统计字符个数。

解法一

import string

def chartype(ch):

 字符类型判断"""

  

def chtypecount(s):

 字符串类型计数器"""

 

for chtype, cnts in chtypecount(input("Enter a string: ")).items():

解法二

sum_d=0

sum_alpha=0

sum_other=0

sum_chinese=0

#s="123 abc def 中klGD国  abcde 伟大"

s=input("请输入字符串:")

for i in range(0,len(s)):

print("数字:",sum_d,"个")

print("字母:",sum_alpha,"个")

print("其他符号:",sum_other,"个")

print("汉字:",sum_chinese,"个")

13、编写程序,计算字符串中单词的个数。

str = input("请您输入一串字符串:")

str1 = str.strip() # 去掉字符串前后空格

index = 0

count = 0

while index < len(str1):

 当不是空格是,下标加1

 当下标大小跟字符串长度一样时结束当前循环

 遇到空格加1

 当下标大小跟字符串长度一样时结束当前循环

 当有两个空格时,下标加1,防止以一个空格算一个单词

print("输入的字符串中一共有count = %d个单词" % count)

14、编写程序,用户输入一个字符串,将偶数下标位的字符提出来合成一个串A,再将奇数下标位置的字符提取出来合成串B,再将A和B连接起来输出。

c=input("请输入字符");

A=""

B=""

for  a in c[::2]:

for b in c[1:len(c):2]:

n=A+B

print(n)

15、编写程序,统计字符串中出现的每个字母出现次数,并输出成一个字典,如{‘a’:3,’A’:5,’b’:2}

#a = "aAsmr3idd4bgs7Dlsf9eAF"

a=input("请输入字符串:")

def fun1_2(x): #1&2

 大小写转换

 判断如果为数字,请将a字符串的数字取出,并输出一个新的字符串

        else:   #2 请统计a字符串出现每个字母的出现次数(忽视大小写),并输出一个字典。例:{'a':3,'b':1}

fun1_2(a)

def fun3(x):

fun3(a)

16、编写程序,统计字符串中出现的每个单词出现次数,并输出成一个字典。

解法一

str1 = "tomorrow is a good day tomorrow is a bad day tomorrow is a sunny day"

list1 = str1.split(" ")

dict1 ={}

for element in list1:

print(dict1)

解法二

str1 = "tomorrow is a good day tomorrow is a bad day tomorrow is a sunny day"

list1 = str1.split(" ")

dict1 ={}

for element in list1:

    value = dict1.get(element)            #如果不存在则返回None

print(dict1)

17、编写程序,将输入的一串字符从前到后每个字符向后移动一位,最后一个字符存放到第一个位置,并输出结果。

arr=[]

r=""

m=input("请输入")

for string in m:

last=arr[-1]

arr.insert(0,last)

arr.pop()

for str in arr:

print(r)

18、编写程序,把一段英文中字母“a”改写成“A”

#输入一串字符,将大写字母转换成小写字母,小写字母转换为大写字母

def LtoU():

 请 输入字符:")

def aToA():

 请 输入字符:")

aToA()

19、编写程序,把一段英文中每句话的首个单词的第一个字母改为大写。

def convert_initial(old: str) -> str:

#print(convert_initial("I am a teacher, and you are student."))

s=input("请输入一个英文句子:")

print(convert_initial(s))

20、编写程序,将一段英文中有连续重复的单词只保留一个。

l = []

s = "hello world hello python"

for i in s.split(" "):

 

 

result = " ".join(l)

print(result)

print()

def onlyOne(x):

t=input("请输入一个英文句子:")

print(onlyOne(t))

21、编写程序,输入一段英文,输出英文中所有长度为3个字母的单词。

import re

x = input('Please input a string:')

pattern = re.compile(r'\\b[a-zA-Z]{3}\\b')

print(pattern.findall(x))

22、编写程序,输入一段英文,输出字符数最多的单词。

import re

words=input("Input the words:")

l=re.split('[\\. ]+',words)  #使用空格分隔词语,得到各个单词

print(l)

i这里我设置的是计数器

s=""

for i in l:

 如果单词的长度为3  输出

print(s)

23、编写程序,要求输入一段英文,以及此段中的一个单词和另外一个单词,然后显示用第二个单词替换第一个单词后的句子。

str='The weather today is really good.'

fword=input('请输入要查找的单词')

rword=input('请输入要替换的单词')

c=str.count(fword)

if c>0:

 替换后的句子为:',str)

else:

 句子中没有要查找的单词')

24、编写自定义函数,实现从屏幕输入3个数,并求出其中最大值。

def myfun():

 请输入一个数:"))

myfun()

25、编写函数,模仿内置函数sort()

s=[1,-3,2,6,8,11,-5,28,88]

t=[]

def mysort(x):

print(mysort(s))

26、编写函数,求出之和,函数形参为n,n由用户在主函数中输入。

def jiecheng(x):

def mySum(n):

k=int(input("请输入一个数:"))

27、编写程序,运用递归方法判断一个数是否为回文数。

a = input("请输入一个数:")

if a.isdigit():

 是回文数")

 不是回文数")

else:

 请输入自然数:")

28、编写程序,运用递归方法分别求出斐波拉契数列和卢卡斯数列前n项之和,n由用户在主函数中输入。

def fblq(x):

def LKS(x):

def mySum(n):

k=int(input("请输入一个数:"))

print(mySum(k))

29、编写程序,运用递归方法求a+aa+aaa+......+aa...a(n个a)之和,a、n由用户在主函数中输入。

from functools import reduce

a = int(input('a:'))

n = int(input(('n:')))

list = []

for i in range(1,n+1):

s = reduce(lambda x,y:x+y,list)

print(list)

print(s)

30、用牛顿迭代法求方程在区间[0,1]中的根。牛顿迭代法解非线性方程根的迭代公式为,f’(x)是f(x)的导函数,结束条件为

def f(xi):

def f1(xi):

x=[]

x.append(0.5)

e误差

e最新加的x在最后

number_iteration=0

while error>eps:

print('牛顿法迭代次数为%f次'%(number_iteration)) #格式化输出

print('方程的根x*为%f'%(x[-1]))

print('f(x*)的值为%f'%(f(x[-1])))

31、编写程序,研究算法的时间复杂度。比较不同的阶乘计算所耗费的时间。

import time

start=time.time()

s=1

for i in range(1,201):

print(s)

print("累乘用时:",time.time()-start)

def jiechen(x):

start=time.time()

t=jiechen(200)

print(t)

print("递归用时:",time.time()-start)下载本文

显示全文
专题