Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测加密字符串中的某些条件并对其解密?-Python_Python_String_Function - Fatal编程技术网

如何检测加密字符串中的某些条件并对其解密?-Python

如何检测加密字符串中的某些条件并对其解密?-Python,python,string,function,Python,String,Function,我尝试使用三个不同的函数来解密加密字符串。以下条件是: (1)如果找到字符“T”(大写),则意味着接下来的三个字符必须是 小写元音 (2)如果符合规则1,则该位置将是从第四个位置开始的连续6位数字,并带有 尊重“T”字。奇数对应于第一个坐标场和对 到第二个坐标字段 例如: Taeo135789->[158379] Tauo123456->[135246] (3)在数字后,出现首字母缩略词3。我想单独打印这个 示例: INPUT: dsa2wtasfwTaeo135789konsadfa241

我尝试使用三个不同的函数来解密加密字符串。以下条件是:

(1)如果找到字符“T”(大写),则意味着接下来的三个字符必须是 小写元音

(2)如果符合规则1,则该位置将是从第四个位置开始的连续6位数字,并带有 尊重“T”字。奇数对应于第一个坐标场和对 到第二个坐标字段


例如:

Taeo135789->[158379]
Tauo123456->[135246]
(3)在数字后,出现首字母缩略词3。我想单独打印这个

示例:

INPUT: dsa2wtasfwTaeo135789konsadfa241

OUTPUT: (Taeo135789kon)
 Taeo
 [158,379]
 kon
我已经试过了:


定义第一条规则(str_enccript):
元音=“aeiou”
str_enccript=str(str_enccript)
对于stru_enccript中的s:
如果s中的“T”:
(接下来的三个字符必须是小写元音。)
其他:
打印(“加密字符串中的错误\n”)

您可以使用reqular表达式从字符串中提取此模式的所有示例:

import re

pat = re.compile(r'(T[aeiou]{3})(\d{6})([a-z]{3})')

def first_rule(encrypted):
    for match in pat.finditer(encrypted):
        t_str, nums, acro = match.group(1, 2, 3)
        coordinates = [int(''.join(nums[x::2])) for x in range(2)]
        print(t_str, coordinates , acro, sep='\n')

first_rule('dsa2wtasfwTaeo135789konsadfa241')
# Taeo
# [158, 379]
# kon
如果您真的不能使用
re
模块(这是一个用Python分发的内置库),那么您可以使用
enumerate
扫描字符串获得类似的结果:

def first_rule(encrypted):
    for i, c in enumerate(encrypted):
        if c == 'T':
            t_str = encrypted[i+1:i+4]
            if len(t_str) != 3 or any(x not in 'aeiou' for x in t_str):
                continue
            t_str = 'T' + t_str
            nums = encrypted[i+4:i+10]
            if len(nums) != 6 or any(x not in '0123456789' for x in nums):
                continue
            coordinates = [int(''.join(nums[x::2])) for x in range(2)]
            acro = encrypted[i+10:i+13]
            if len(acro) != 3 or any(x not in 'qwertyuiopasdfghjklzxcvbnm' for x in acro):
                continue
            print(t_str, coordinates , acro, sep='\n')

通过跟踪字符串中的索引,我们可以在
T
之前进行匹配

你没有问任何问题。你应该能够用正则表达式完成。类似于:
r“(T)([aeiou]{3})(\d{6})(\w{3})”
如果你不想问,为什么要发布代码?如果你想帮助修复它,你必须解释它的问题所在。@BrianJoseph我知道,但我想做的是创建这三个不同的函数。我将更新我的代码,因为某些原因我无法粘贴它all@ScottHunter你是对的,但我想我正确地解释了问题所在:使用函数在特定条件下解密加密字符串这正是我要做的,但不使用库,只使用def函数,每一条规则都有不同的功能