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)