Python小型算法题集锦

本文精选了七个Python算法练习题,包括质因数分解、打印字母菱形、二分法查找、回形取数等,并提供了详细的代码实现及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#Python的一些算法练习题
每天做一些算法题

  • 1.质因数分解
  • 2.打印字母排列的菱形
  • 3.二分法查找对象
  • 4.回形取数
  • 5.方差
  • 6.分组问题
  • 7.字母统计

1.质因数分解

如435234=251171732

x=int(input('x='))
print(x,'=',end='')
for i in range(2,x):
	while(x!=1):
		if(x%i==0):
			print(i,'*',end='')
			x/=i
		else:
			break
print('\b ',end='')

为了省劲用了退格符
运行结果:

x=366054
366054 =2 *3 *13 *13 *19 *19

2.打印字母排列的菱形

输入
一个正整数m(1~26),表示菱形的半径(直径就是m*2+1)
输出
一个以m为半径的菱形,最外层是字母A,然后里一层是字母B,然后是C……依次排列

z=[chr(i) for i in range(65,91)]#生成一个26个大写字母的集合
m=int(input('请输入半经(1~26):'))
def sc(a,b,c):
	for i in range(a,b,c):
		for j in range(m-i):
			print(' ', end='')
		#打印空格
		for j in range(2*i+1):
			if j<(2*i+1)/2:
				print(z[j], end='')
			else:
				print(z[(2*i)-j], end='')
		print(' ')
		#打印字母
sc(0,m,1)#打印上半个菱形
sc(m-2,-1,-1)#打印下半个菱形

运行结果:

请输入半经(1~26)5
     A
    ABA
   ABCBA
  ABCDCBA
 ABCDEDCBA
  ABCDCBA
   ABCBA
    ABA
     A

3.二分法查找对象

输入一个有序的元素列表(必须有序),如果要查找的元素包含在其中,二分法查找返回其位置,否则返回None

def search(list,item):
	low=0
	high=len(list)-1
	while(low<=high):
		mid=round((low+high)/2)
		guess=list[mid]
		if(guess==item):
			return mid
		if(guess>item):
			high=mid-1
		else:
			low=mid+1
	return None
num=int(input('查找的对象:'))
L=[2,5,8,13,49,80]
print(search(L,num))

运行结果

查找的对象:13
3

4.回形取数

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入第一行是两个不超过200的正整数m,n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出只有一行,共mn个数。为输入矩阵回形取数得到的结果。数之间用一一个空格分隔,行末不要有多余的空格。
eg:
输入
3 3
1 2 3
4 5 6
7 8 9
输出
1 4 7 8 9 6 3 2 5

matrix,result=[],[]
i,p=0,0
m,n=map(int,input().split())
#input().split()可在同一行对多个变量赋值
for _ in range(m):
    matrix.append(input().split())
	#对矩阵赋值
while p!=m*n:
    L,H=n-i-1,m-i-1
    for y in range(i,m-i):#向下取数
        result.append(matrix[y][i])
        p+=1
    for x in range(i+1,n-i):#向右取数
        result.append(matrix[H][x])
        p+=1
    for y in range(H-1,i-1,-1):#向上取数
        result.append(matrix[y][L])
        p+=1
    for x in range(L-1,i,-1):#向左取数
        result.append(matrix[i][x])
        p+=1
    i+=1
#当取得的数的个数与矩阵元素的个数相等时,循环结束
for m in range(p-1):
    print(result[m],end=' ')
print(result[p-1])
#输出

运行结果

5 6
2 8 4 9 6 5
4 1 3 4 8 9
2 6 4 8 1 7
5 3 6 8 2 1
9 4 8 7 6 1
2 4 2 5 9 4 8 7 6 1 1 7 9 5 6 9 4 8 1 6 3 6 8 2 1 8 4 3 4 8

5.方差

单纯的计算

def fangcha(List):
   return(sum(((float(sum(List))/len(List)-x)**2 for x in List))/len(List))

6.分组问题

任意数分三组,使得每组的和尽量相等

yu=[3, 8, 20, 15, 60, 1, 32]
c=yu[:3]
for x in range(3,len(yu)):
   c.sort()
   if(c[0]+c[1]>yu[x]):
      c[0]+=yu[x]
   else:
      c[0],c[1]=c[0]+c[1],yu[x]
print(c)

运行结果

[53, 26, 60]

得出来的并不是最优解,以后再改进

7.字母统计

输入一个字符串统计其中的每个字母的出现的次数(不区分大小写),并以垂直柱状图的形式输出

import string
s=input()
zm=[0]*26
small=string.ascii_lowercase
large=string.ascii_uppercase
'''
large,small=[]
large.append((chr(i)+ord('A')) for i in range(26))
small.append((chr(i)+ord('a')) for i in range(26))
'''
for i in range(len(s)):
	for x in range(26):
		if(s[i]==small[x] or s[i]==large[x]):
			zm[x]+=1
M=max(zm)
for i in range(M):
	m=max(zm)
	for j in range(26):
		if(zm[j]==m&m!=0):
			print('-',end='')
			zm[j]-=1
		else:
			print(' ',end='')
	print('')
for x in large:
	print(x,end='')

运行结果

aaaadddnnnnnppciyyyyzzzz
             -
-            -          --
-  -         -          --
-  -         - -        --
- --    -    - -        --
ABCDEFGHIJKLMNOPQRSTUVWXYZ
### 如何使用 Python 解决算法问题的最佳实践 解决算法问题是提高编程技能的重要途径之一。以下是关于如何通过 Python 来高效解决问题的一些最佳实践: #### 使用合适的工具Python 是一种功能强大且灵活的语言,其丰富的标准库第三方模块可以显著简化复杂任务的处理过程[^1]。例如,在涉及数值计算或数据分析的任务中,`NumPy` `Pandas` 可以提供高效的数组操作支持;而在图形化展示方面,`Matplotlib` 或者 `Seaborn` 能够帮助直观理解数据。 对于特定领域内的高级应用比如机器学习或者深度学习,则有专门设计用于这些场景下的框架如 TensorFlow, PyTorch 等可供选用。合理运用现成资源而非事必躬亲重新构建基础组件有助于提升开发效率并减少错误发生几率[^2]。 #### 编写清晰可维护代码 保持良好的编码习惯同样重要。遵循PEP8风格指南可以使项目结构更加一致易于阅读; 同时采用有意义变量名代替模糊缩写能够增强程序逻辑表达力让他人更容易理解修改您的工作成果。此外还应注意文档字符串的重要性——它们不仅描述了函数做什么以及接受哪些参数返回什么值等内容外还能作为测试依据自动生成部分单元测验案例. 当面对较为复杂的业务需求时拆分大块功能到多个小型独立部件里去往往是个不错的选择因为它既便于单独调试也利于后期扩展升级。最后记得充分利用异常处理机制来捕获潜在运行期问题从而保障整个系统的稳定性. ```python def find_max_subarray(nums): """ 寻找最大连续子序列之 参数: nums (list): 输入整数列表 返回: int: 最大子序 """ if not nums: raise ValueError("输入不能为空") current_sum = max_sum = nums[0] for num in nums[1:]: current_sum = max(num, current_sum + num) max_sum = max(max_sum, current_sum) return max_sum ``` 上述例子展示了寻找给定数组中的最大连续子序列总的方法。它包含了必要的边界条件判断、合理的命名约定以及详尽的功能说明以便于后续使用者快速上手.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值