在进行了一些提示搜索之后,我发现必须使用import re并使用正则表达式。答案是“链接列表”。http://www.pythonchallenge.com/pc/def/equality.html
但我很好奇,我做错了什么,我以前尝试解决它?
tekstas = "the string that i need to decode"
possible_solution = []
for i in range(0, len(tekstas)):
if ((ord(tekstas[i]) < 123) and (ord(tekstas[i]) > 96)) and ((ord(tekstas[i-1])) > 64) and ((ord(tekstas[i-1])) < 90) \
and ((ord(tekstas[i-2])) > 64) and ((ord(tekstas[i-2])) < 90) and ((ord(tekstas[i-3])) > 64) and ((ord(tekstas[i-3])) \
< 90) and ((ord(tekstas[i+1])) > 64) and ((ord(tekstas[i+1])) < 90) and ((ord(tekstas[i+2])) > 64) and \
((ord(tekstas[i+2])) < 90) and ((ord(tekstas[i+3])) > 64) and ((ord(tekstas[i+3])) < 90):
possible_solution.append(tekstas[i-4]+tekstas[i-3]+tekstas[i-2]+tekstas[i-1]+tekstas[i]+tekstas[i+1]+tekstas[i+2]+\
tekstas[i+3]+tekstas[i+4])
for i in range (0, len(possible_solution)):
candidate = possible_solution[i]
if (ord(candidate[0]) < 123) and (ord(candidate[0]) > 96) and (ord(candidate[8]) < 123) and (ord(candidate[8]) > 96):
print(candidate[1:8])我得到的答案: IQNlQSL OEKiVEY CNDeHSB OIXdKBF CJAsACF KWGtIDC
我从中得到的小字母:谎言,为什么我少了几个字母?
发布于 2015-07-27 17:17:22
您正在排除Z,因为您正在用(ord(tekstas[i-2])) < 90而不是(ord(tekstas[i-2])) < 91测试大写字母。
请注意,这里根本不需要使用ord(),您可以直接与字母进行比较:
tekstas[i-2] < '['或者更直接地识别:
tekstas[i-2] <= 'Z'您也不需要单独的tekstas[i-2] >= 'A' and tekstas[i-2] <= 'Z'测试;您可以使用链式比较:
'A' <= tekstas[i-2] <= 'Z'然而,最简单的方法是使用 method
tekstas[i-2].isupper()对于默认的区域设置,只有当字符串中的所有字符都是大写ASCII字母时,才是正确的。
这意味着您可以一次测试多个字母;与str.islower()一起,您的第一个if测试可以简化为:
tekstas[i].islower() and (tekstas[i - 3:i] + tekstas[i + 1:i + 4]).isupper()https://stackoverflow.com/questions/31659103
复制相似问题