python基础100练习题Word文档下载推荐.docx
《python基础100练习题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《python基础100练习题Word文档下载推荐.docx(54页珍藏版)》请在冰豆网上搜索。
![python基础100练习题Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/28/8f08080d-dfef-4a39-92ff-7ce6cb5b28b6/8f08080d-dfef-4a39-92ff-7ce6cb5b28b61.gif)
while(n+1)**2-n*n<
=168:
n+=1
print(n+1)
----------
85
123456789
思路是:
最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:
平方根的值小数为0即可。
结合起来:
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=[]
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())
a,b=1,1
foriinrange(target-1):
a,b=b,a+b
print(a)
实例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)
b='
b)
c='
c)
d='
d)
e='
e)
============RESTART:
F:
\PyWorkspace\Python100\100examples\007.py============
a=[1,2,3,4,['
'
],5]
b=[1,2,3,4,['
c=[1,2,3,4,['
d=[1,2,3,4,['
e=[1,2,3,4,['
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)
实例010:
给人看的时间
题目暂停一秒输出,并格式化当前时间。
程序分析同009.
print(time.strftime('
%Y-%m-%d%H:
%M:
%S'
time.localtime(time.time())))
12345
实例011:
养兔子
题目有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析我认为原文的解法有点扯,没有考虑3个月成熟的问题,人家还是婴儿怎么生孩子?
考虑到三个月成熟,可以构建四个数据,其中:
一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。
繁殖几个月?
:
month_1=1
month_2=0
month_3=0
month_elder=0
month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_elder+month_3
第%d个月共'
%(i+1),month_1+month_2+month_3+month_elder,'
对兔子'
其中1月兔:
month_1)
其中2月兔:
month_2)
其中3月兔:
month_3)
其中成年兔:
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
ifflag:
continue
\nSimplifythecodewith"
else"
\n'
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:
实例014:
分解质因数
题目将一个整数分解质因数。
输入90,打印出90=233*5。
程序分析根本不需要判断是否是质数,从2开始向数本身遍历,能整除的肯定是最小的质数。
target=int(input('
输入一个整数:
print(target,'
='
end='
iftarget<
0:
target=abs(target)
-1*'
flag=0
=1:
print(target)
whileTrue:
foriinrange(2,int(target+1)):
iftarget%i==0:
print("
%d"
%i,end='
iftarget==i:
*'
target/=i
1234567891011121314151617181920212223242526
实例015:
分数归档
题目利用条件运算符的嵌套来完成此题:
学习成绩>
=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析用条件判断即可。
points=int(input('
输入分数:
ifpoints>
=90:
grade='
A'
elifpoints<
60:
C'
else:
B'
print(grade)
实例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)
实例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
oth+=1
space:
spa)
digit:
num)
alpha:
alp)
other:
oth)
12345678910111213141516171819
实例018:
复读机相加
题目求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序分析用字符串解决。
a=input('
被加数字:
n=int(input('
加几次?
foriinrange(n):
res+=int(a)
a+=a[0]
结果是:
res)
实例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:
实例020:
高空抛物
题目一球从100米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
程序分析无
high=200.
total=100
foriinrange(10):
high/=2
total+=high
print(high/2)
总长:
total)
实例021:
猴子偷桃
题目猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
程序分析按规则反向推断:
猴子有一个桃子,他偷来一个桃子,觉得不够又偷来了与手上等量的桃子,一共偷了9天。
peach=1
foriinrange(9):
peach=(peach+1)*2
print(peach)
实例022:
比赛对手
题目两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析找到条件下不重复的三个对手即可。
a=set(['
x'
y'
z'
b=set(['
c=set(['
c-=set(('
a-=set('
foriina:
forjinb:
forkinc:
iflen(set((i,j,k)))==3:
a:
%s,b:
%s,c:
%s'
%(i,j,k))
12345678910
实例023:
画菱形
题目打印出如下图案(菱形):
*
***
*****
*******
程序分析递归调用即可。
defdraw(num):
a="
*"
*(2*(4-num)+1)
print(a.center(9,'
ifnum!
draw(num-1)
draw(4)
实例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)
实例025:
阶乘求和
题目求1+2!
+3!
+…+20!
的和。
程序分析1+2!
=1+2(1+3(1+4(…20
(1))))
res=1
foriinrange(20,1,-1):
res=i*res+1
print(res)
实例026:
递归求阶乘
题目利用递归方法求5!
deffactorial(n):
returnn*factorial(n-1)ifn>
1else1
print(factorial(5))
123
实例027:
递归输出
题目利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
程序分析递归真是蠢方法。
defrec(string):
iflen(string)!
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))
实例029:
反向输出
题目给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。
程序分析学会分解出每一位数,用字符串的方法总是比较省事。
输入一个正整数:
n=str(n)
%d位数'
%len(n))
print(n[:
:
-1])
实例030:
回文数
题目一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
程序分析用字符串比较方便,就算输入的不是数字都ok。
n=input("
随便你输入啥啦:
a=0
b=len(n)-1
flag=True
whilea<
b:
ifn[a]!
=n[b]:
不是回文串'
flag=False
a,b=a+1,b-1
ifflag:
是回文串'
实例031:
字母识词
题目请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析这里用字典的形式直接将对照关系存好。
weekT={'
h'
thursday'
u'
tuesday'
}
weekS={'
saturday'
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()])
print(a)
123456789101112131415
实例032:
反向输出II
题目按相反的顺序输出列表的值。
程序分析无。
a=['
one'
two'
three'
]
print(a[:
12
实例033:
列表转字符串
题目按逗号分隔列表。
L=[1,2,3,4,5]
.join(str(n)forninL))
实例034:
调用函数
题目练习函数调用。
defhello():
HelloWorld!
defhelloAgain():
foriinrange
(2):
hello()
if__name__=='
__main__'
helloAgain()
实例035:
设置输出颜色
题目文本颜色设置。
classbcolo