1.日期函数
常用汇总
import datetime
now = datetime.datetime.now() # 此时此刻的日期+时间,2023-02-28 11:15:07.537283
weekday = datetime.datetime.now().weekday() # 今天周几,0 ~ 6分别表示周一 ~ 周日
now3h = datetime.datetime.now() + datetime.timedelta(hours=3) # 当前时刻+3小时,2023-02-28 14:07:30.214658
#时间与字符串的转换1
datestr1 = '2023-02-28T14:07:30.214658Z'
data_time1 = datetime.datetime.strptime(datestr1,"%Y-%m-%dT%H:%M:%S.%fZ") # 2023-02-28 14:07:30.214658
#时间与字符串的转换2
datestr2 = '2023-02-28 14:07:30'
data_time2 = datetime.datetime.strptime(datestr2,"%Y-%m-%d %H:%M:%S") # 2023-02-28 14:07:30
datestr2 = '2023-02-28 14'
date_time2 = datetime.datetime.strptime(datestr2,"%Y-%m-%d %H") # 2023-02-28 14:00:00
#时间与字符串的转换3
date_time3 = datetime.datetime.now()
datestr3 = str(date_time3)
# 计算两个日期相差多少天
d1 = datetime.datetime(2023,2,1)
d2 = datetime.datetime(2023,2,28)
##print((d2-d1).days)
# 计算当前小时
time_str = "%Y-%m-%d %H"
current_time = datetime.datetime.now() # 2023-02-28 11:22:29.855603
date_time_str = current_time.strftime(time_str) # 2023-02-28 11
gt_time = datetime.datetime.strptime(date_time_str, time_str) # 2023-02-28 11:00:00
gt_week = current_time - datetime.timedelta(days = current_time.weekday()+7) # 上一周 2023-02-20 11:22:29.855603
import time
cur = datetime.datetime.now() # 2023-02-28 11:22:29.855603
cur = datetime.datetime.strftime(cur, "%Y-%m-%d") # 2023-02-28
cur = time.strptime(cur, "%Y-%m-%d") # time.struct_time(tm_year=2023, tm_mon=2, tm_mday=28, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=59, tm_isdst=-1)
print(cur.tm_year) # 2023
print(cur.tm_yday) # 返回的是当年的第几天,即59
(1)回文日期
代码:
import datetime
n = input()
y = int(n[:4])
m = int(n[4:6])
d = int(n[6:])
date = datetime.date(y,m,d)
flag = True
for i in range(99999999):
date += datetime.timedelta(days=1)
strda = str(date).replace('-','')
if flag:
if strda[:]==strda[::-1]:
flag=False
print(strda)
if strda[0]==strda[2]==strda[5]==strda[7] and strda[1]==strda[3]==strda[4]==strda[6]:
print(strda)
break
(2)跑步训练
代码:
import datetime
start = datetime.date(2000,1,1)
end = datetime.date(2020,10,1)
sum = 0
while start <= end:
if start.day == 1 or start.weekday() == 0:
sum += 2
else:
sum += 1
start += datetime.timedelta(days=1)
print(sum)
datetime.date(XXXX,XX,XX).**weekday()**返回的是日期(XXXX,XX,XX)下是周几,0 ~ 6分别代表周一 ~ 周日
(3)顺子日期
解答代码:
import os
import sys
# 请在此输入您的代码
import datetime
d1 = datetime.date(2022,1,1)
d2 = datetime.date(2022,12,31)
day = datetime.timedelta(days=1)
# print(str(d.year)+str(d.month))
m=['012','123','234','345','456','567','678','789']
c=0
while d1<=d2:
str1 = str(d1).replace('-','')
for i in range(6):
if str1[i:i+3] in m:
c+=1
break # 只要有一个顺子,就可以退出啦!
d1+=day
print(c)
2. set()函数
>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l'])) # 重复的被删除
>>> x & y # 交集
set(['o'])
>>> x | y # 并集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y # 差集
set(['r', 'b', 'u', 'n'])
(1)组队
代码:
s1 = [97,92, 0, 0,89,82, 0, 0, 0,95, 0, 0,94, 0, 0, 0,98,93, 0, 0]
s2 = [90,85, 0, 0,83,86, 0,97, 0,99, 0, 0,91,83, 0, 0,83,87, 0,99]
s3 = [ 0,96, 0, 0,97, 0, 0,96,89, 0,96, 0, 0,87,98, 0,99,92, 0,96]
s4 = [ 0, 0, 0,80, 0, 0,87, 0, 0, 0,97,93, 0, 0,97,93,98,96,89,95]
s5 = [ 0, 0,93,86, 0, 0,90, 0, 0, 0, 0,98, 0, 0,98,86,81,98,92,81]
li = []
for i in range(20):
for j in range(20):
for k in range(20):
for l in range(20):
for m in range(20):
if len(set([i,j,k,l,m])) == 5:
li.append(s1[i]+s2[j]+s3[k]+s4[l]+s5[m])
print(max(li))
注意:使用append()函数来向list中添加元素。
3. itertools函数
常用汇总
itertools.combinations()
来自 itertools 模块的函数 combinations(list_name, x) 将一个列表和数字 ‘x’ 作为参数,并返回一个元组列表,每个元组的长度为 ‘x’,其中包含x个元素的所有可能组合。列表中元素不能与自己结合,不包含列表中重复元素
itertools.permutations(str, b)
连续返回由str元素生成的长度为b的全排列组合。
(1)七段码
import itertools
W = {'a':['b','f'],
'b':['a','g','c'],
'c':['b','g','d'],
'd':['c','e'],
'e':['d','g','f'],
'f':['g','e','a'],
'g':['b','c','e','f']
}
total = []
for i in range(1,8):
str1 = itertools.combinations('abcdefg',i)
for j in str1:
total.append(''.join(j))
num = 0
for str1 in total:
for str2 in itertools.permutations(str1):
for c in range(len(str2)-1):
if str2[c+1] not in W[str2[c]]:
break
else:
num+=1
break
print(num)
4.sort()函数
解答代码:
str1 = 'WHERETHEREISAWILLTHEREISAWAY'
str2 = []
for c in str1:
str2.append(c)
str2.sort()
for c in str2:
print(c,end="")
s = input() # input()函数输入的是 str 类型数据,假设 s = 'bdca'
print(type(s)) # <class 'str'>
s.sort() # 报错,AttributeError: 'str' object has no attribute 'sort'
s = list(s) # 直接转为 list 类型,s = ['b', 'd', 'c', 'a']
print(type(s)) # <class 'list'>
s.sort() # 排序, s = ['a', 'b', 'c', 'd']
print(s)
s1 = ''.join(s) # s = 'abcd'
print(type(s1)) # <class 'str'>
sort()函数自定义排序key
def shuweihe(x):
s = str(x)
ans = 0
for c in s:
ans += int(c)
return ans
n = input()
m = int(input())
data = list(str(i+1) for i in range(int(n)))
data.sort(key=shuweihe)
print(data[m-1])