0
点赞
收藏
分享

微信扫一扫

python最经典基础算法题-9

题目001:按位操作

学习使用按位与 &

学习使用按位或 |

学习使用按位异或 ^

学习使用按位取反 ~

【思路】:大概看了一下资料,按位操作可以通过bin()函数转换为二进制从而实现。感觉二进制的计算如果不是学加密之类的基本用不上。所以这一题,大概写了集合的用法,&、|在python中是集合set()才用的符号两个列表求交集并集,通常也都是转换为集合,然后进行计算的。

# 可迭代变量转换为集合形式
x = set('runoob')
y = set('google')
print(x, y) # 重复的被删除 {'n', 'o', 'b', 'u', 'r'} {'o', 'g', 'e', 'l'}
# 集合的交集、并集、差集
print(x & y) # 交集 {'o'}
print(x | y) # 并集 {'e', 'o', 'g', 'l', 'u', 'n', 'b', 'r'}
print(x - y) # 差集 {'n', 'b', 'u', 'r'}
# 当然也可以写成函数形式,不过确实没有上面符号好记。
print(x.intersection(y))
print(x.union(y))
print(x.difference(y))

题目002:取一个整数a从右端开始的4-7位。

a = 123456789
b = str(a)
print(b[-7:-3]) # 写的时候注意一下python切片是[-7:-4)左闭右开的,不包含[-4]的,所以要写成-3才能取到

题目003:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

【思路】:感觉自己写的比官网简单好懂,直接用python思维写,确实很方便

a = [6,3,10,2,5,1,4,7,9,8] i = a.index(max(a))  
a[0],a[i] = a[i],a[0] i = a.index(min(a))
a[-1],a[i] = a[i],a[-1] print(a)

题目004:有n个人围成一圈,顺序排号

从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

【思路】:python基础变量没有这种圈状循环的。最直接的方法是列表,点队尾再从头开始。

缺点是列表删除中间项,后面的索引值都会变,需要计算。所以我换了种方法,把问题抽象成排队进门的问题完全不考虑索引问题。

# 初始化
n = 34
arr = list(range(1,n+1)) # 所有人门外站成一队【a】,进门后依旧按序站好【b】
count,a,b = 0,arr,[] # 开始解题
while len(a+b)>1: # 循环直到只剩1人
num,count=a.pop(0),count+1 # 排队进门,每进一人【a.pop】,按一下计数器
if count%3!=0:b.append(num) # 进门后依旧按序站好【b.append】,计数器逢3淘汰。
if a==[]:a,b=b,[] # 如果门外没人了【a=[]】,所有人重新到门外站好【a=b】
print(a[0])

题目005:编写input()和output()函数输入,输出5个学生的数据记录。

【思路】:用字典类型随便写写

def inp(data):
name = input('输入学生姓名:')
score = input('输入学生成绩:')
data[name]=score
print('成功录入')
return data
def outp(data):
name = input('输入学生姓名:')
print('该学生的成绩是:',data.get(name))
return data
if __name__ == '__main__':
data = {}
while 1:
a = input('输入/输出学生成绩(i/o):')
 
  
 
if a=='i':
data = inp(data)
elif a=='o':
data = outp(data)
else:
print('输入值不对')

举报

相关推荐

0 条评论