第一道题是字符串编码问题,就是输入gbk格式的中文,和字母,截取一定的字符,但是不能把中文截成两半。
python默认的是UTF-8的格式,在UTF-8中中文和英文一样处理,都是一个字符的长度,
>>>s='中文1234编码5678'
>>>s[:1]
'中文
>>>s[2]
'1'
>>>s[6:8]
'编码'
解决方法:先用encode方法将字符串转换为bytes,encode的作用就是使我们看到的直观的字符转换成计算机内的字节形式,这里encode的参数encoding='gbk'表示编码为GBK方案,errors='ignore'表示忽略错误。GBK编码方案中每个中文字编码为2个字节,这样就可以与排版显示的宽度一致,截取指定位置字串后再使用decode方法解码为GBK格式。编码方案也可以使用其他如utf-8、unicode等,但这样每个中文字符编码长度有可能与排版显示长度不一样,在格式化输出时计算长度就有点复杂了:
>>> ss = s.encode(encoding='gbk',errors='ignore')
>>> print(ss)
b'\xd6\xd0\xce\xc41234\xb1\xe0\xc2\xeb5678'
>>> ss[:4].decode(encoding='gbk',errors='ignore')
'中文'
>>> ss[8:12].decode(encoding='gbk',errors='ignore')
'编码'
第二个是黑色星期五。
import sys
b= input().split()
n=int(b[0])
w=int(b[1])
if(len(b)>2 or len(b)<2):
print("-1")
exit()
if(n<0 or n>400):
print("-1")
exit()
if(w<0 or w>6):
print("-1")
exit()
def get(y,m):
if(y%4==0 and y%100!=0):
i=1
elif(y%400==0):
i=1
else:
i=0
if(m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12):
return 31
elif m==2:
if(i==1):
return 29
else:
return 28
return 30
# 输入n,限定范围.注意转化为int类型
a= [0 for i in range(7)]
week=6
for i in range(1900,1900+n):
for j in range(1,13):
a[week%7]+=1
week+=get(i,j)
#print(str(a[6])+" "+str(a[0]))
#for i in range(1,6):
print(str(a[w]))
核心思想就是先手动推断出第一个13号是周几,算出是周六,week=6。然后算出这个月是多少天,加上,然后对7取余。这个时候可以算出下个月13号是周几,直到给定的日期,输出周五的个数。
整体来说不难,但是我的通过率只有87%,不知道是那部分原因,是不是输入的时候没有判断是不是字符?