蓝桥杯py抱佛脚篇~

C++转蓝桥杯py,临时报一下python的佛脚,混子专属,建议算法入门小白别来看

基础语法

输入输出

# 输入一个数
n=int(input())

# 输入两、三个数,例如:1 2 或者 1 2 3
x,y = map(int,input().split())

# 输入数组
# ——— 1 ——
nums=[int(i) for i in input().split()]
print(nums[1])
# ——— 2 ———
c = list(map(int,input().split()))
print(c)

# 保留两位小数
x = 3.1415926
# 方法1:round()函数
print(round(x, 2))
# 方法2
a=3.14159265
print("%.2f"%a) # 这个自带四舍五入

# 输入二维数组
# ——— 1 ———
nums=[]
for i in range(n):
  a,b=map(int,input().split())
  nums.append([a,b])
# ——— 2 ———
nums = []
num = []
n = int(input())
for i in range(n):
    num=list(map(int,input().split()))
    nums.append(num)
print(nums[1][1])

# 无穷大的表示
INF=float('inf')

# 输入字符串
b = str(input())
print(b[1])

# 输出之间用空格隔开
# ——— 1 ———
a=[1,2,3,4]
print(" ".join(map(str,a)))
# ——— 2 ———
a=[1,2,3,4]
for i in a:
    print(str(i)+" ",end='')

# 用format函数(格式化字符串)输出多个值
print("{} + {} = {}".format(a,b,a+b))

集合(set)

集合是无序的、不重复的元素集合。以下是关于集合操作的示例:

# 输入
s = set(input().split())
print(s)

# 添加元素
s.add(5)

# 删除元素
s.remove(1)

排序

例2: 使用列表的sort()方法进行排序

nums = [3, 1, 4, 1, 5, 9, 2]
nums.sort()

print(nums)  # 输出: [1, 1, 2, 3, 4, 5, 9

例3: 对字符串进行排序

text = "algorithm"
sorted_text = sorted(text)

print("".join(sorted_text))  # 输出: "aghilmort"

datetime库中的基本函数

datetime.datetime(year,month,day,hour,minute,second,microsecond) 用来生成一个datetime类型的时间
datetime.date(year,month,day) 生成一个日期
datetime.time(hour,minute,second,microsecond) 生成一个时间
datetime.timedelta(days,seconds,minutes,hours,weeks) 表示一个时间差(datetime类型之下的时间变量的加减必须通过timedelta来进行 不能直接加减)
date.weekday( ) 表示某一个日期是星期几 0-6分别表示周一到周日

下面我们来看一下2020年python省赛的第三题:

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。
如果某天是周一或者月初(1
日),为了激励自己,小蓝要跑2千米。
如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。
请问这段时间小蓝总共跑步多少千米?

import datetime

# 用2020年python省赛的题举例
start_day=datetime.date(2000,1,1) # 开始日期是2000年1月1日
end_day=datetime.date(2020,10,1) # 结束日期是2020年10月1日
time_delta=datetime.timedelta(1) # 每次加减1天

res=0 # 记录最终的跑步距离
while(start_day<=end_day):
  if(start_day.day==1 or start_day.weekday()==0): # 是某月第一天或者是星期一
    res+=2
  else: res+=1
  start_day+=time_delta # 日期往后推一天

print(res) # 答案是8879

# ———————— 其他函数 ——————————
print("年:", today.year)  # 返回today对象的年份
print("月:", today.month)  # 返回today对象的月份
print("日:", today.day)  # 返回today对象的日
print("星期:", today.weekday())  # 0代表星期一,类推

python中常用字符串函数

find(str, beg=0, end=len(string))
查找子串str第一次出现的位置,如果找到则返回相应的索引,否则返回-1

s = “kdhsfimkvd”
print(s.find(‘h’))
#2

upper 将字符串中所有元素都转为大写

s.upper()

lower 将字符串中所有元素都转为小写

s.lower()

split(seq=“”, num=string.count(str))
以 seq (默认空格)为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串(只需num个seq分隔符)。
分割后得到新列表

str = “my name is qlee, what is your name”
print(str.split())
#以空格为分隔符

join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

seq1 = (“h”, “e”, “l”, “l”, “o”) #元组
seq2 = [“h”, “e”, “l”, “l”, “o”] #列表
seq3 = “hello” #字符串
print (“”.join(seq1)) #无分隔符
print (" “.join(seq1))#空格
print (”,“.join(seq1))#”,"
__
hello
h e l l o
h,e,l,l,o

replace(old, new [, max]) 把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次

str1 = “my name is qlee”
print (str1.replace(“qlee”, “lq”)) #注意str1本身不发生改变
my name is lq

BFS

from collections import deque

def judge(x,y):
    if x>=n or x<0 or y>=m or y<0:
        return False
    if matrix[x][y]==0 or inq[x][y]==True:
        return False
    return True


def BFS(x,y):
    dq=deque()
    dq.append([x,y])
    inq[x][y]=True
    while len(dq)!=0:
        top=dq.popleft()
        for i in range(4):
            xx=top[0]+X[i]
            yy=top[1]+Y[i]
            if judge(xx,yy):
                dq.append([xx,yy])
                inq[xx][yy]=True

n,m = map(int,input().split())
matrix = [list(map(int,input().split())) for _ in range(n)]
inq = [[False]*m for _ in range(n)]

X = [0,0,1,-1]
Y = [1,-1,0,0]
ans=0
for x in range(n):
    for y in range(m):
        if matrix[x][y]==1 and inq[x][y]==False:
            ans+=1
            BFS(x,y)
print(ans)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值