python基础100练习题.docx
- 文档编号:10296394
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:64
- 大小:31.78KB
python基础100练习题.docx
《python基础100练习题.docx》由会员分享,可在线阅读,更多相关《python基础100练习题.docx(64页珍藏版)》请在冰豆网上搜索。
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)
12345678
简便方法用itertools中的permutations即可。
importitertools
sum2=0
a=[1,2,3,4]
foriinitertools.permutations(a,3):
print(i)
sum2+=1
print(sum2)
12345678
实例002:
“个税计算”
题目企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序分析分区间计算即可。
profit=int(input('Showmethemoney:
'))
bonus=0
thresholds=[100000,100000,200000,200000,400000]
rates=[0.1,0.075,0.05,0.03,0.015,0.01]
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)
1234567891011121314
实例003:
完全平方数
题目一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:
n=0
while(n+1)**2-n*n<=168:
n+=1
print(n+1)
----------
85
123456789
思路是:
最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:
平方根的值小数为0即可。
结合起来:
n=0
while(n+1)**2-n*n<=168:
n+=1
foriinrange((n+1)**2):
ifi**0.5==int(i**0.5)and(i+168)**0.5==int((i+168)**0.5):
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)
12345678910111213
实例005:
三数排序
题目输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析练练手就随便找个排序算法实现一下,偷懒就直接调函数。
raw=[]
foriinrange(3):
x=int(input('int%d:
'%(i)))
raw.append(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)))
raw2.append(x)
print(sorted(raw2))
123456789101112131415161718
实例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)
12345678910111213
实例007:
copy
题目将一个列表的数据复制到另一个列表中。
程序分析使用列表[:
],拿不准可以调用copy模块。
importcopy
a=[1,2,3,4,['a','b']]
b=a#赋值
c=a[:
]#浅拷贝
d=copy.copy(a)#浅拷贝
e=copy.deepcopy(a)#深拷贝
a.append(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\007.py============
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']]
1234567891011121314151617181920212223
实例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(time.time()))[-2:
])
time.sleep
(1)
1234
实例010:
给人看的时间
题目暂停一秒输出,并格式化当前时间。
程序分析同009.
importtime
foriinrange(4):
print(time.strftime('%Y-%m-%d%H:
%M:
%S',time.localtime(time.time())))
time.sleep
(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)
123456789101112
实例012:
100到200的素数
题目判断101-200之间有多少个素数,并输出所有素数。
程序分析判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
用else可以进一步简化代码.
importmath
foriinrange(100,200):
flag=0
forjinrange(2,round(math.sqrt(i))+1):
ifi%j==0:
flag=1
break
ifflag:
continue
print(i)
print('\nSimplifythecodewith"else"\n')
foriinrange(100,200):
forjinrange(2,round(math.sqrt(i))+1):
ifi%j==0:
break
else:
print(i)
123456789101112131415161718192021
实例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
1234567891011121314151617181920212223242526
实例015:
分数归档
题目利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析用条件判断即可。
points=int(input('输入分数:
'))
ifpoints>=90:
grade='A'
elifpoints<60:
grade='C'
else:
grade='B'
print(grade)
12345678
实例016:
输出日期
题目输出指定格式的日期。
程序分析使用datetime模块。
importdatetime
print(datetime.date.today())
print(datetime.date(2333,2,3))
print(datetime.date.today().strftime('%d/%m/%Y'))
day=datetime.date(1111,2,3)
day=day.replace(year=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)
12345678910111213141516171819
实例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:
res.add(i)
res.add(num/i)
returnres
foriinrange(2,1001):
ifi==sum(factor(i))-i:
print(i)
123456789101112
实例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))
12345678910
实例023:
画菱形
题目打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
程序分析递归调用即可。
defdraw(num):
a="*"*(2*(4-num)+1)
print(a.center(9,''))
ifnum!
=1:
draw(num-1)
print(a.center(9,''))
draw(4)
1234567
实例024:
斐波那契数列II
题目有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析就是斐波那契数列的后一项除以前一项。
a=2.0
b=1.0
s=0
forninrange(1,21):
s+=a/b
a,b=a+b,a
print(s)
12345678
实例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
whilea ifn[a]! =n[b]: print('不是回文串') flag=False break a,b=a+1,b-1 ifflag: print('是回文串') 123456789101112 实例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) 123456789101112131415 实例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() 12345678 实例035: 设置输出颜色 题目文本颜色设置。 程序分析无。 classbcolors:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 基础 100 练习题
![提示](https://static.bdocx.com/images/bang_tan.gif)