新手程序员100道Python学习练习题Word格式文档下载.docx

上传人:b****4 文档编号:17073170 上传时间:2022-11-28 格式:DOCX 页数:42 大小:32.42KB
下载 相关 举报
新手程序员100道Python学习练习题Word格式文档下载.docx_第1页
第1页 / 共42页
新手程序员100道Python学习练习题Word格式文档下载.docx_第2页
第2页 / 共42页
新手程序员100道Python学习练习题Word格式文档下载.docx_第3页
第3页 / 共42页
新手程序员100道Python学习练习题Word格式文档下载.docx_第4页
第4页 / 共42页
新手程序员100道Python学习练习题Word格式文档下载.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

新手程序员100道Python学习练习题Word格式文档下载.docx

《新手程序员100道Python学习练习题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《新手程序员100道Python学习练习题Word格式文档下载.docx(42页珍藏版)》请在冰豆网上搜索。

新手程序员100道Python学习练习题Word格式文档下载.docx

———003:

完全平方数

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:

n=0

while(n+1)**2-n*n<

=168:

n+=1print(n+1)思路是:

最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。

至于判断是否是完全平方数,最简单的方法是:

平方根的值小数为0即可。

结合起来:

n+=1foriinrange((n+1)**2):

ifi**0.5==int(i**0.5)and(i+168)**0.5==int((i+168)**0.5):

print(i-100)

———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)

———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))

———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)

print('

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,['

],5]c=[1,2,3,4,['

]]d=[1,2,3,4,['

]]e=[1,2,3,4,['

]]

———008:

九九乘法表

输出9*9乘法口诀表。

分行与列考虑,共9行9列,i控制行,j控制列。

foriinrange(1,10):

forjinrange(1,i+1):

print('

%d*%d=%2ld'

%(i,j,i*j),end='

print()

———009:

暂停一秒输出

暂停一秒输出。

使用time模块的sleep()函数。

importtime

foriinrange(4):

print(str(int(time.time()))[-2:

])

time.sleep

(1)

———010:

给人看的时间

暂停一秒输出,并格式化当前时间。

同009.importtimeforiinrange(4):

print(time.strftime('

%Y-%m-%d%H:

%M:

%S'

time.localtime(time.time())))

———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)

———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'

else:

———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

iftarget<

=1:

print(target)

whileTrue:

foriinrange(2,int(target+1)):

iftarget%i==0:

print("

%d"

%i,end='

iftarget==i:

*'

target/=i

———015:

分数归档

利用条件运算符的嵌套来完成此题:

学习成绩>

=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

用条件判断即可。

points=int(input('

输入分数:

ifpoints>

=90:

grade='

A'

elifpoints<

60:

C'

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)

———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)

returnresforiinrange(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))

———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))

———027:

递归输出

利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

递归真是蠢方法。

defrec(string):

iflen(string)!

rec(string[1:

print(string[0],end='

)rec(input('

stringhere:

———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)

———032:

反向输出II

按相反的顺序输出列表的值。

无。

a=['

one'

two'

three'

]

print(a[:

———033:

列表转字符串

按逗号分隔列表。

L=[1,2,3,4,5]

.join(str(n)forninL))

———034:

调用函数

练习函数调用。

defhello():

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(bcolors.WARNING+"

警告的颜色字体?

+bcolors.ENDC)

———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:

———037:

排序

对10个数进行排序。

同———005。

raw[i],raw[j]=raw[j],

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1