暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python基础--综合练习题代码

AI小白笔记 2021-10-29
481

点击蓝字

关注我们

题目1

输入一个正整数,输出对应的二进制数。


代码

a=eval(input('请输入一个正整数:'))
print(a,'对应的二进制是:',end='')
ls=[]
while a!=0:
   b=a%2
   ls.append(b)
   a=a//2
for i in reversed(ls):
   print(i,end='')

请输入一个正整数:10

10 对应的二进制是:1010


代码解析

基本思路是连续对2求余数,将余数存入列表,再求对2的整除商,若商不等于0,再重复以上步骤,第8行reversed()函数的作用是反转列表,即对列表进行逆序输出。


题目2

输入两个整数,输出它们的最大公约数。


代码

a=eval(input('请输入一个整数:'))
b=eval(input('请再输入一个整数:'))
print('这两个数的最大公约数是:',end='')
if a<b:
a,b=b,a
c=a%b
while c!=0:
a,b=b,c
c=a%b
print(b)

请输入一个整数:90

请再输入一个整数:33

这两个数的最大公约数是:3


代码解析

基本思路是碾转相除法,较大的数赋给a,较小的数赋给b,a对b求余数赋给c,若c不等于0,a=b,b=c,继续求余数,直至余数为0。


题目3

计算1!+2!+3!+...+100!,要求不得使用math库内置的求阶乘的函数。


代码

a=1
s=0
for i in range(1,101):
   a=a*i
   s+=a
print(s)

94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313


代码解析

这道题不需要专门写一个内层循环来求第i个数的阶乘,当求出了i的阶乘之后,下次循环利用公式(n+1)!=n!*(n+1)就能方便地求出下一个数的阶乘,再存入累加和即可。


另外,通过这道题目再次强调python中的整数是精确的,不管此数有多大。


题目4

输出1000以内的完全数,完全数是指一个数恰好等于它的因子之和(包括1,不包括数本身),例如6=1+2+3,6是一个完全数。


代码

print('1000以内的完全数:',end='')
for i in range(2,1001):
   s=0
   for j in range(1,i):
       if i%j==0:
           s+=j
   if s==i:
       print(i,end=' ')

1000以内的完全数:6 28 496


代码解析

用到了循环的嵌套,外层循环从1到1000逐个判断,内层循环判断1~i-1各个数是否为i的因子,若是存入累加和,退出内层循环后判断累加和是否等于该数本身,若是就断定为完全数。


对于初学者来说,第3行尤为重要,看似简单的一句话,在课堂上,很多人却写不出来,忘记在每次判断之前将这个存累加和的变量重新置为0。


题目5

假设某高校行政岗的老师每周一至周五需要打上班卡1个与下班卡1个,周日晚上需要打上班卡1个与下班卡1个,1月15日至2月26日为寒假不需要打卡,7月13日至8月20日为暑假不需要打卡,问2021全年需打卡多少次?


代码

from datetime import date
from datetime import timedelta
day=date(2021,1,1)
endday=date(2021,12,31)
s=0
while day<=endday:
if not(date(2021,1,15)<=day<=date(2021,2,26) or date(2021,7,13)<=day<=date(2021,8,20)) and day.isoweekday()!=6:
s+=2
day+=timedelta(days=1)
print(s)

484


代码解析

这是datetime库在实际生活当中的应用,根据题意,寒暑假期间和星期六不用打卡,其它时间都要打卡,所以第7行代码用and连接两个判断条件,第一个条件是不在寒假和暑假期间,第二个条件是当天不是星期六。第9行代码将变量每次加1(天)。


本题根据实际情况作了一点改动,实际情况是某行政岗老师每个月还要值班若干次,每次值班打2次卡,逢节假日放假不用打卡,比如元旦、清明、端午、中秋都是三天假期,假期这几天周一到周日都有可能,这样的情况下一年打几次卡呢?问题比较复杂,有兴趣的同学研究一下吧。


题目6

若有列表a=[3,7,8,0,5,6],列表b=[1,9,4,2],编程合并这两个列表,并将新列表的元素按升序排列。


代码

a=[3,7,8,0,5,6]
b=[1,9,4,2]
c=a+b
print(sorted(c))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


这道题没什么好解析,主要是针对学过C语言和java的同学出了这道题,想通过这个题目告诉各位,我们既然学了python,就要有python的思维方式,代码要显得pythonic一点,即代码要具有python风格,而不是写着python的语法,代码却是其它语言的风格。


如果用底层代码实现的话,要用某种排序算法(比如冒泡排序)先对两个列表进行排序,再将两个排好序的列表合并成一个有序的长列表。具体实现代码在此暂且按下不表,以后如果有机会写数据结构(用python描述)相关文章再慢慢聊。


小结一下


到此为止,本号python基础部分全部更新完毕,撒花

下节开始更新python在大数据可视化方面的应用,敬请期待!


本号开通了赞赏功能,试用一下,各位读者和粉丝朋友们如果觉得这两个月来更新的文章对您有点作用,如果可以的话,赏个小钱,金额随意,重在心意!谢过!



THE END


文章转载自AI小白笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论