赞
踩
最近看到网上有放出来Python的竞赛的题目,截取一段题目来思考和做一做,一来巩固Python的语法知识,二来加强自己职业技能的训练。最重要的是解题思维的锻炼,坚持每周写一篇技术文章的稿子,加强自身学习的动力。下列分享一些解题的思路。附属在代码里面,进行讲解。
解题思路:使用python字符串中count函数方法进行统计。
- # -*- conding:utf-8 -*-
- #需求1:统计1-2020的数字列表中使用2数字一共有多少次。
- n = 0
- for i in range(1,2021):
- a = str(i)
- n += a.count("2")
- print(n)
执行结果:
解题思路:先定义矩阵列表,从矩阵中抽取几行几列的数值进行叠加,使用X*1000(位数)方法进行叠加。注意抽取行数或者列数不能超过总行数或者总列数。比如总行数有6行,取值不能超过总行数,总列数是6列,不能超过总列数。遍历每i行,只要j+4<=总列数。遍历每j行,只要i+3<=总行数,斜边计算i+3 <总行数,j+3<总行数。注意按行取值出来是数值,按照列取值出来可能是列表。所以匹对值也要注意。
- nums = [[2, 2, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0],
- [0, 0, 2, 2, 0, 2],
- [0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 2, 2],
- [0, 0, 2, 0, 2, 0],
- ]
- print("矩阵行数:",len(nums),"矩阵列数:",len(nums[0]))
- res = 0
- for i in range(len(nums)):#取行数
- for j in range(len(nums[0])):#取列数
- if j+4 <= len(nums[0]):#取行数小于总列数
- a = nums[i][j:j+4]
- if a == [2,0,2,0]:#取值出来是列表
- res += 1
- if i+3 < len(nums):#取值列数小于总行数
- b = nums[i][j]*1000 + nums[i+1][j]*100 +nums[i+2][j]*10 + nums[i+3][j]
- if b == 2020:
- res += 1
- if i+3 < len(nums) and j+3 < len(nums[0]):#取倾斜列的数值
- c = nums[i][j]*1000 + nums[i+1][j+1]*100 +nums[i+2][j+2]*10 + nums[i+3][j+3]
- if c == 2020:
- res += 1
- print("矩阵中2020的计数:",res)
执行结果:
解题思路:使用时间函数datetime来解决这个问题,定义两个日期的赋值,使用day方法,确定1号,使用isoweekday方法确定确定周一,然后两个循环遇到就增加2km,每天都是安装1km增加。排除特殊情况即是周一也是1号的情况。
- import datetime
- a = datetime.date(2020,1,1)
- b = datetime.date(2022,10,1)
- res = 0
-
- while True:
- if a == b :break
-
- if a.day == 1:#如果是1号情况下
- res+=2
- a = a + datetime.timedelta(days=1)#使用函数间隔1天
- continue
- if a.isoweekday() == 1:#如果是周一情况下
- res+=2
- a = a +datetime.timedelta(days=1)
- continue
- res += 1
- a = a + datetime.timedelta(days=1)
- print("总计跑的千米数km:",res)
执行结果:
解题思路:观察斜对角,发现1行1列、2行2列、3行3列,第二个参数是第一个参数用数值+行数*4,比如1、5、13、25.....规律可循:1+1*4=5、5+2*4=13、13+3*4=25.
- #判断蛇形填数第20行第20列的数值
- res = 1
- for i in range(1,20):
- res += i*4
-
- print("蛇形填数的第二十行第二十列是:",res)
执行结果为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。