试题编号: | 201803-3 |
试题名称: | URL映射 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给相应的处理代码。现在,请你来实现一个简单的 URL 映射功能。 输入格式 输入第一行是两个正整数 n 和 m,分别表示 URL 映射的规则条数和待处理的 URL 地址个数,中间用一个空格字符分隔。 输出格式 输入共 m 行,第 i 行表示 qi 的匹配结果。如果匹配成功,设匹配了规则 pj ,则输出对应的 rj。同时,如果规则中有参数,则在同一行内依次输出匹配后的参数。注意整数参数输出时要把前导零去掉。相邻两项之间用一个空格字符分隔。如果匹配失败,则输出 404。 样例输入 5 4 样例输出 year_archive 2004 样例说明 对于第 1 个地址 /articles/2004/,无法匹配第 1 条规则,可以匹配第 2 条规则,参数为 2004。 数据规模和约定 1 ≤ n ≤ 100,1 ≤ m ≤ 100。 |
import re
a= input().split()
rule_num=int(a[0])
s_num=int(a[1])
rule = []
s = []
def handle_int_str(s):
global rule
length = len(s)
total =len(rule)
for i in range(total):
flag = i
param=[]
if length < (len(rule[i])-1) and '<path>' not in rule[i]:
flag = -1
continue
else:
for j in range(length):
if rule[i][j] == '<int>':
p = r'[0-9]'
pattern = re.compile(p)
if not re.match(pattern,s[j]):
flag =-1
break
param.append(int(s[j]))
elif rule[i][j] == '<str>':
if type(s[j])!=type('1'):
flag=-1
break
param.append(s[j])
elif rule[i][j] == '<path>':
path=[]
for k in s[j:]:
path.append(k)
path = '/'.join(path)
param.append(path)
break
else :
if rule[i][j] != s[j]: #static
flag =-1
break
if flag!= -1: #found
print(rule[flag][-1],end=' ')
for l in range(len(param)):
print(param[l],end='')
if l!=len(param)-1:
print(' ',end='')
print()
return
print('404')
for i in range(rule_num):
a = input()
a = a.split('/')[1:]
if '<path>' in a[-1]:
a.append(a[-1][7:])
a[-2] = a[-2][:6]
a[-1] = a[-1].lstrip()
rule.append(a)
for i in range(s_num):
a = input()
a = a.split('/')[1:]
if a[-1] == '':
a.pop()
#print(a)
handle_int_str(a)
s.append(a)
第一次用python做CCF的第三题,结果只有50分,请各位大佬批评指正,有哪些地方没考虑周全!!