python基础100练习题.docx
《python基础100练习题.docx》由会员分享,可在线阅读,更多相关《python基础100练习题.docx(62页珍藏版)》请在冰点文库上搜索。
python基础100练习题
-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
python基础100练习题
实例001:
数字组合
题目有四个数字:
1、2、3、4,能组成多少个互不相同且无重复数字的三位数各是多少
程序分析遍历全部可能,把有重复的剃掉。
total=0
foriinrange(1,5):
forjinrange(1,5):
forkinrange(1,5):
if((i!
=j)and(j!
=k)and(k!
=i)):
print(i,j,k)
total+=1
print(total)
简便方法用itertools中的permutations即可。
importitertools
sum2=0
a=[1,2,3,4]
foriin(a,3):
print(i)
sum2+=1
print(sum2)
实例002:
“个税计算”
题目企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数
程序分析分区间计算即可。
profit=int(input('Showmethemoney:
'))
bonus=0
thresholds=[100000,100000,200000,200000,400000]
rates=[,,,,,]
foriinrange(len(thresholds)):
ifprofit<=thresholds[i]:
bonus+=profit*rates[i]
profit=0
break
else:
bonus+=thresholds[i]*rates[i]
profit-=thresholds[i]
bonus+=profit*rates[-1]
print(bonus)
121314
实例003:
完全平方数
题目一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
程序分析因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:
n=0
while(n+1)**2-n*n<=168:
n+=1
print(n+1)
----------
85
9
思路是:
最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:
平方根的值小数为0即可。
结合起来:
n=0
while(n+1)**2-n*n<=168:
n+=1
foriinrange((n+1)**2):
ifi**==int(i**and(i+168)**==int((i+168)**:
print(i-100)
1234567
实例004:
这天第几天
题目输入某年某月某日,判断这一天是这一年的第几天
程序分析特殊情况,闰年时需考虑二月多加一天:
defisLeapYear(y):
return(y%400==0or(y%4==0andy%100!
=0))
DofM=[0,31,28,31,30,31,30,31,31,30,31,30]
res=0
year=int(input('Year:
'))
month=int(input('Month:
'))
day=int(input('day:
'))
ifisLeapYear(year):
DofM[2]+=1
foriinrange(month):
res+=DofM[i]
print(res+day)
1213
实例005:
三数排序
题目输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析练练手就随便找个排序算法实现一下,偷懒就直接调函数。
raw=[]
foriinrange(3):
x=int(input('int%d:
'%(i)))
(x)
foriinrange(len(raw)):
forjinrange(i,len(raw)):
ifraw[i]>raw[j]:
raw[i],raw[j]=raw[j],raw[i]
print(raw)
raw2=[]
foriinrange(3):
x=int(input('int%d:
'%(i)))
(x)
print(sorted(raw2))
8
实例006:
斐波那契数列
题目斐波那契数列。
程序分析斐波那契数列(Fibonaccisequence),从1,1开始,后面每一项等于前面两项之和。
图方便就递归实现,图性能就用循环。
#递归实现
defFib(n):
return1ifn<=2elseFib(n-1)+Fib(n-2)
print(Fib(int(input())))
#朴素实现
target=int(input())
res=0
a,b=1,1
foriinrange(target-1):
a,b=b,a+b
print(a)
1213
实例007:
copy
题目将一个列表的数据复制到另一个列表中。
程序分析使用列表[:
],拿不准可以调用copy模块。
importcopy
a=[1,2,3,4,['a','b']]
b=a#赋值
c=a[:
]#浅拷贝
d=(a)#浅拷贝
e=(a)#深拷贝
(5)
a[4].append('c')
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)
============RESTART:
F:
\PyWorkspace\Python100\100examples\============
a=[1,2,3,4,['a','b','c'],5]
b=[1,2,3,4,['a','b','c'],5]
c=[1,2,3,4,['a','b','c']]
d=[1,2,3,4,['a','b','c']]
e=[1,2,3,4,['a','b']]
223
实例008:
九九乘法表
题目输出9*9乘法口诀表。
程序分析分行与列考虑,共9行9列,i控制行,j控制列。
foriinrange(1,10):
forjinrange(1,i+1):
print('%d*%d=%2ld'%(i,j,i*j),end='')
print()
1234
实例009:
暂停一秒输出
题目暂停一秒输出。
程序分析使用time模块的sleep()函数。
importtime
foriinrange(4):
print(str(int()))[-2:
])
(1)
1234
实例010:
给人看的时间
题目暂停一秒输出,并格式化当前时间。
程序分析同009.
importtime
foriinrange(4):
print('%Y-%m-%d%H:
%M:
%S',())))
(1)
12345
实例011:
养兔子
题目有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
程序分析我认为原文的解法有点扯,没有考虑3个月成熟的问题,人家还是婴儿怎么生孩子考虑到三个月成熟,可以构建四个数据,其中:
一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。
month=int(input('繁殖几个月:
'))
month_1=1
month_2=0
month_3=0
month_elder=0
foriinrange(month):
month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_elder+month_3
print('第%d个月共'%(i+1),month_1+month_2+month_3+month_elder,'对兔子')
print('其中1月兔:
',month_1)
print('其中2月兔:
',month_2)
print('其中3月兔:
',month_3)
print('其中成年兔:
',month_elder)
12
实例012:
100到200的素数
题目判断101-200之间有多少个素数,并输出所有素数。
程序分析判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
用else可以进一步简化代码.
importmath
foriinrange(100,200):
flag=0
forjinrange(2,round(i))+1):
ifi%j==0:
flag=1
break
ifflag:
continue
print(i)
print('\nSimplifythecodewith"else"\n')
foriinrange(100,200):
forjinrange(2,round(i))+1):
ifi%j==0:
break
else:
print(i)
8192021
实例013:
所有水仙花数
题目打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析利用for循环控制100-999个数,每个数分解出个位,十位,百位。
foriinrange(100,1000):
s=str(i)
one=int(s[-1])
ten=int(s[-2])
hun=int(s[-3])
ifi==one**3+ten**3+hun**3:
print(i)
1234567
实例014:
分解质因数
题目将一个整数分解质因数。
例如:
输入90,打印出90=233*5。
程序分析根本不需要判断是否是质数,从2开始向数本身遍历,能整除的肯定是最小的质数。
target=int(input('输入一个整数:
'))
print(target,'=',end='')
iftarget<0:
target=abs(target)
print('-1*',end='')
flag=0
iftarget<=1:
print(target)
flag=1
whileTrue:
ifflag:
break
foriinrange(2,int(target+1)):
iftarget%i==0:
print("%d"%i,end='')
iftarget==i:
flag=1
break
print('*',end='')
target/=i
break
8526
实例015:
分数归档
题目利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析用条件判断即可。
points=int(input('输入分数:
'))
ifpoints>=90:
grade='A'
elifpoints<60:
grade='C'
else:
grade='B'
print(grade)
实例016:
输出日期
题目输出指定格式的日期。
程序分析使用datetime模块。
importdatetime
print'%d/%m/%Y'))
day=(1111,2,3)
day=(year=+22)
print(day)
1234567
实例017:
字符串构成
题目输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析利用while或for语句,条件为输入的字符不为‘\n’。
string=input("输入字符串:
")
alp=0
num=0
spa=0
oth=0
foriinrange(len(string)):
ifstring[i].isspace():
spa+=1
elifstring[i].isdigit():
num+=1
elifstring[i].isalpha():
alp+=1
else:
oth+=1
print('space:
',spa)
print('digit:
',num)
print('alpha:
',alp)
print('other:
',oth)
819
实例018:
复读机相加
题目求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序分析用字符串解决。
a=input('被加数字:
')
n=int(input('加几次:
'))
res=0
foriinrange(n):
res+=int(a)
a+=a[0]
print('结果是:
',res)
1234567
实例019:
完数
题目一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完数。
程序分析将每一对因子加进集合,在这个过程中已经自动去重。
最后的结果要求不计算其本身。
deffactor(num):
target=int(num)
res=set()
foriinrange(1,num):
ifnum%i==0:
(i)
(num/i)
returnres
foriinrange(2,1001):
ifi==sum(factor(i))-i:
print(i)
12
实例020:
高空抛物
题目一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米第10次反弹多高
程序分析无
high=200.
total=100
foriinrange(10):
high/=2
total+=high
print(high/2)
print('总长:
',total)
1234567
实例021:
猴子偷桃
题目猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
程序分析按规则反向推断:
猴子有一个桃子,他偷来一个桃子,觉得不够又偷来了与手上等量的桃子,一共偷了9天。
peach=1
foriinrange(9):
peach=(peach+1)*2
print(peach)
1234
实例022:
比赛对手
题目两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析找到条件下不重复的三个对手即可。
a=set(['x','y','z'])
b=set(['x','y','z'])
c=set(['x','y','z'])
c-=set(('x','z'))
a-=set('x')
foriina:
forjinb:
forkinc:
iflen(set((i,j,k)))==3:
print('a:
%s,b:
%s,c:
%s'%(i,j,k))
实例023:
画菱形
题目打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
程序分析递归调用即可。
defdraw(num):
a="*"*(2*(4-num)+1)
print(9,''))
ifnum!
=1:
draw(num-1)
print(9,''))
draw(4)
1234567
实例024:
斐波那契数列II
题目有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析就是斐波那契数列的后一项除以前一项。
a=
b=
s=0
forninrange(1,21):
s+=a/b
a,b=a+b,a
print(s)
实例025:
阶乘求和
题目求1+2!
+3!
+…+20!
的和。
程序分析1+2!
+3!
+…+20!
=1+2(1+3(1+4(…20
(1))))
res=1
foriinrange(20,1,-1):
res=i*res+1
print(res)
1234
实例026:
递归求阶乘
题目利用递归方法求5!
。
程序分析递归调用即可。
deffactorial(n):
returnn*factorial(n-1)ifn>1else1
print(factorial(5))
123
实例027:
递归输出
题目利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
程序分析递归真是蠢方法。
defrec(string):
iflen(string)!
=1:
rec(string[1:
])
print(string[0],end='')
rec(input('stringhere:
'))
123456
实例028:
递归求等差数列
题目有5个人坐在一起,问第五个人多少岁他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。
请问第五个人多大
程序分析就一等差数列。
defage(n):
ifn==1:
return10
return2+age(n-1)
print(age(5))
12345
实例029:
反向输出
题目给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。
程序分析学会分解出每一位数,用字符串的方法总是比较省事。
n=int(input('输入一个正整数:
'))
n=str(n)
print('%d位数'%len(n))
print(n[:
:
-1])
1234
实例030:
回文数
题目一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
程序分析用字符串比较方便,就算输入的不是数字都ok。
n=input("随便你输入啥啦:
")
a=0
b=len(n)-1
flag=True
whileaifn[a]!
=n[b]:
print('不是回文串')
flag=False
break
a,b=a+1,b-1
ifflag:
print('是回文串')
12
实例031:
字母识词
题目请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析这里用字典的形式直接将对照关系存好。
weekT={'h':
'thursday',
'u':
'tuesday'}
weekS={'a':
'saturday',
'u':
'sunday'}
week={'t':
weekT,
's':
weekS,
'm':
'monday',
'w':
'wensday',
'f':
'friday'}
a=week[str(input('请输入第一位字母:
')).lower()]
ifa==weekTora==weekS:
print(a[str(input('请输入第二位字母:
')).lower()])
else:
print(a)
实例032:
反向输出II
题目按相反的顺序输出列表的值。
程序分析无。
a=['one','two','three']
print(a[:
:
-1])
12
实例033:
列表转字符串
题目按逗号分隔列表。
程序分析无。
L=[1,2,3,4,5]
print(','.join(str(n)forninL))
12
实例034:
调用函数
题目练习函数调用。
程序分析无。
defhello():
print('HelloWorld!
')
defhelloAgain():
foriinrange
(2):
hello()
if__name__=='__main__':
helloAgain()
实例035:
设置输出颜色
题目文本颜色设置。
程序分析无。
classbcolors:
HEADER='\033[95m'
OKBLUE='\033[94m'
OKGREEN='\033[92m'
WARNING='\033[93m'
FAIL='\033[91m'
ENDC='\033[0m'
BOLD='\033[1m'
UNDERLINE='\033[4m'
print+"警告的颜色字体"+
实例036:
算素数
题目求100之内的素数。
程序分析用else执行for循环的奖励代码(如果for是正常完结,非break)。
lo=int(input('下限:
'))
hi=int(input('上限:
'))
foriinrange(lo,hi+1):
ifi>1:
forjinrange(2,i):
if(i%j)==0:
break
else:
print(i)
9
实例037:
排序
题目对10个数进行排序。
程序分析同实例005。
raw=[]
foriinrange(10):
x=int(input('int%d:
'%(i)))
(x)
foriinrange(len(raw)):
forjinrange(i,len(raw)):
ifraw[i]>raw[j]:
raw[i],raw[j]=raw[j],raw[i]
print(raw)
实例038:
矩阵对角线之和