蓝桥杯如何不复习也得奖?python组基础知识分享

获奖证书镇楼
获奖证书镇楼

文章目录

  • 前言
  • 一、python常用的基础语法
  • 二、进阶技巧
  • 1.生成二维数组
  • 2.两个循环变量
  • 3.按键排序
  • 4.无穷大
  • 三.库的引用
  • 1.math库
  • 2.itertools库
  • 3.datetime库
  • 总结

  • 前言

    国赛刚结束,出来分享下笔记
    

    可能有些标题党,但是由于举办届数少、报名人数不多等原因,python组省赛得奖是不难的(至少22年之前是这样)但是今年给我的感觉是:题越来越难并且怪了…不知道明年会不会好点╮(╯▽╰)╭

    回归正题,本文主要适用蓝桥杯路人选手,在校赛或者省赛混个名次话,不大量学习也是可以的(比如我)尤其是校赛模拟赛,只要你会简单的python,不会数据结构、不会算法也是可以得很多分的。现在分享一下我总结的,适合裸考蓝桥杯的选手看的基础知识


    一、python常用的基础语法

    range() 等差数列

    >>>a = list(range(10))
    >>>a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    >>>b = list(range(2,10,2))
    >>>b
    [2, 4, 6, 8]
    
    >>>for i in range(5):
    >>>    print(i)
    0
    1
    2
    3
    4
    
    

    for i in range(n) 表示循环n遍

    split() 切片

    >>>a = "10 20"
    >>>a.split()
    ['10', '20']
    
    

    题目中很多输入都是一行中输入多个数据,所以需要split()

    map() 列表转换

    a = "10 20"
    a = list(map(int, a.split()))
    a
    [10, 20]
    
    

    配合split()和list()使用

    sort() 排序

    a = [1,3,4,5,2]
    a.sort()
    a
    [1, 2, 3, 4, 5]
    a.sort(reverse=True)
    a
    [5, 4, 3, 2, 1]
    
    

    注意sort()是直接改变列表内容
    以后会有一个sort()更复杂的排序实现


    二、进阶技巧

    1.生成二维数组

    List = [[0]*x for i in range(y)]
    

    生成一个长为y,宽为x的二维数组,列表[0]的内容可更改

    >>>l1 = [[0] * 5 for i in range(3)]
    l1
    [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    >>>for i in l1:
    >>>    print(i) 
    [0, 0, 0, 0, 0]
    [0, 0, 0, 0, 0]
    [0, 0, 0, 0, 0]
    
    

    2.两个循环变量

    当循环中 i 和 j 需要分开操作时

    >>>for i, j in zip(range(5), range(10,15)):
    >>>    print(i, j)
        
    0 10
    1 11
    2 12
    3 13
    4 14
    
    

    3.按键排序

    list.sort(cmp=None, key=None, reverse=False)
    我们利用key来实现有要求的排序

    >>>def fun(s):
    >>>    return s.count("1")
    
    
    >>>l = ["11", "1011", "0001", "11111"]
    >>>l.sort(key=fun)
    >>>print(l)
    ['0001', '11', '1011', '11111']#按照"1"的个数排序
    
    

    同理,可以对字典排序

    >>>def fun(d):
    >>>    return d["age"]
    
    
    >>>d = [
    >>>    {"name":"小明", "age":14},
    >>>    {"name":"小红", "age":13},
    >>>    {"name":"小刚", "age":15}]
    >>>d.sort(key=fun)
    >>>print(d)
    [{'name': '小红', 'age': 13}, {'name': '小明', 'age': 14}, {'name': '小刚', 'age': 15}]
    #按照字典中的"year"键的值排序
    

    4.无穷大

    无穷大:float(‘inf’)
    负无穷大:float(''inf)

    a = float('inf')#给a赋值无穷大
    

    三.库的引用

    蓝桥杯是可以引用python自带的库的!
    可以为你节省很多时间!
    下面我总结了一些我觉得常用的库

    1.math库

    常用的函数

    import math
    
    math.gcd()#求最大公约数
    math.factorial()#求阶乘
    

    这两个函数,自己写怎么也要几分钟吧,引用math库,一秒搞定╮(╯▽╰)╭

    2.itertools库

    神器呀,排列、组合在蓝桥杯里有很多应用
    全排列 :permutations()
    组合:combinations()

    import itertools
    
    a = [1, 2, 3]
    for i in itertools.permutations(a):#对a进行全排列
        print(i)
        
    >
    (1, 2, 3)
    (1, 3, 2)
    (2, 1, 3)
    (2, 3, 1)
    (3, 1, 2)
    (3, 2, 1)
    
    import itertools
    
    a = [1, 2, 3]
    for i in itertools.combinations(a,2):#求a长度为2的组合
        print(i)
    
    >
    (1, 2)
    (1, 3)
    (2, 3)
    

    3.datetime库

    日期题基本都能用

    >>>import datetime
    >>>a = datetime.date(2000,1,1)
    >>>print(a.day)#输出a的日
    1
    >>>print(a.month)#输出a的月
    1
    >>>print(a.weekday())#输出a是星期几
    5
    >>>print(a.year)#输出a的年份
    2000
    >>>b = datetime.timedelta(2)#timedelta(a) 表示a天间隔
    >>>a = a + b
    >>>print(a)
    2000-01-03
    
    

    看一下真题应用吧

    import datetime
    a=datetime.date(1900,1,1)
    b=datetime.date(9999,12,31)
    count=0
    while a<b:#循环所有日期
        if '2' in str(a):
            cnt+=1
        a+=tatetime.timedelta(1)#加上一天
    print(cnt+1)#print(1994240)
    

    总结

    就算不会数据结构、算法、数论,掌握这些,省赛应该可以混个奖了吧╮(╯▽╰)╭,校赛越发简单,填空题手算都可以做两三题

    总而言之,大家不要对比赛太害怕,祝大家都能成功混到奖!

    物联沃分享整理
    物联沃-IOTWORD物联网 » 蓝桥杯如何不复习也得奖?python组基础知识分享

    发表评论