python入门题
每天五题练习
本文章记录了python经典编程题目,初学者必须要学会哦
实例 061:
题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
fp = open('test1.txt')
a = fp.read()
fp.close()
fp = open('test2.txt')
b = fp.read()
fp.close()
fp = open('test3.txt', 'w')
l = list(a + b)
l.sort()
s = ''
s = s.join(l)
fp.write(s)
fp.close()
实例 062:
题目:编写一个程序,计算0—7所能组成的奇数个数。
sum = 4
s = 4
for j in range(2,9):
print(sum)
if j <= 2:
s *= 7
else:
s *= 8
sum += s
print('sum = %d' % sum)
实例 063:
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
nmax = 50
n = int(input('请输入总人数:'))
num = []
for i in range(n):
num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
if num[i] != 0 : k += 1
if k == 3:
num[i] = 0
k = 0
m += 1
i += 1
if i == n : i = 0
i = 0
while num[i] == 0: i += 1
print(num[i])
实例 064:
题目:编写一个程序,用于对一个数进行分解质因子。
n=int(input('请输入一个n:'))
result=[]
i=2
str1=str(n)+'='
while n>1:
if n%i==0:
n/=i
result.append(str(i))
i -= 1
i +=1
str1+='*'.join(result)
print(str1)
实例 065:
题目:古代有一个梵塔,塔内有A、B、C三个基座,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有人想把这64个盘子从A座移到C座,但每次只允许移动一个盘子,并且在移动的过程中,3个基座上的盘子始终保持大盘在下,小盘在上。在移动过程中盘子可以放在任何一个基座上,不允许放在别处。编写程序,用户输入盘子的个数,显示移动的过程。
解题思路:假定盘子从大到小依次编号为:盘1、盘2、
如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C
如果有2个盘子,可以先将盘2移动到B,将盘1移动到C后,再将盘2移动到C
如果有3 个盘子,那么根据2个盘子的结论,可以借助C将盘2和盘3从A移动到B,将盘1从A移动到C,A变成空座;借助A座,将B上的两个盘子移动到C
上述思路可以一直扩展下去,根据以上的分析,可以写出下面的递归表达: 将一个盘子从A移动到C
借助C将n-1个盘子从A移动到B
将一个盘子从A移动到C n>1
借助A将n-1个盘子从B移动到C
借助B将n个盘子从A移动到C
为了编写一个递归函数实现“借助B将n个盘子从A移到C”,比较等式左右两边相似操作,会发现:
盘子的数量从n变化到n-1,问题规模缩小了,显然n是一个可变的参数
盘子的起始位置是变化的,等式左侧是A,右侧是A或B
盘子的最终位置是变化的,等式左侧是C、右侧是B或C
同样被借助的位置也是变化的
因此,递归函数共有盘子数、起始位置、借助位置和最终位置4个变量,因此函数有4个可变参数。假定函数的参数一次为盘子数、初始位置、借助位置和最终位置,则可写出下面函数。
def Hanoi(n,ch1,ch2,ch3):
if n==1:
print(ch1,'->',ch3)
else:
Hanoi(n-1,ch1,ch3,ch2)
print(ch1,'->',ch3)
Hanoi(n-1,ch2,ch1,ch3)
N=int(input("请输入盘子的数量:"))
Hanoi(N,'A','B','C')
今天的任务完成啦~
明天继续加油~冲冲冲!