为什么Python 3的循环输出和行为有所不同?

问题描述 投票:0回答:1

这是一个密码生成器,我无法真正确定问题出在哪里,但是从输出中,我可以说问题出在turnFromAlphabet()附近

函数turnFromAlphabet()将字母字符转换为其整数值。

random模块,我认为这里不做任何事情,因为它只是决定将字符串中的字符转换为大写还是小写。并且,如果一个字符串位于其中,则在发送或传递给turnFromAlphabet()时,它将首先转换为小写形式以避免错误,但仍然存在错误。

CODE:

import random
import re

#variables
username = "oogisjab" #i defined it already for question purposes
index = 0
upperOrLower = []
finalRes = []
index2a = 0
#make decisions
for x in range(len(username)):
    decision = random.randint(0,1)
    if(decision is 0):
        upperOrLower.append(True)
    else:
        upperOrLower.append(False)
#Apply decisions
for i in range(len(username)):
    if(upperOrLower[index]):
        finalRes.append(username[index].lower())
    else:
        finalRes.append(username[index].upper())
    index+=1
s = ""
#lowkey final
s = s.join(finalRes)

#reset index to 0
index = 0

def enc(that):
    if(that is "a"):
        return "@"
    elif(that is "A"):
        return "4"
    elif(that is "O"):
        return "0" #zero
    elif(that is " "):
        # reduce oof hackedt
        decision2 = random.randint(0,1)
        if(decision2 is 0):
            return "!"
        else:
            return "_"
    elif(that is "E"):
        return "3"
    else:
        return that

secondVal = []

for y in range(len(s)):
    secondVal.append(enc(s[index]))
    index += 1

def turnFromAlphabet(that, index2a):
    alp = "abcdefghijklmnopqrstuvwxyz"
    alp2 = list(alp)
    for x in alp2:
        if(str(that.lower()) == str(x)):
            return index2a+1
            break
        else:
            index2a += 1
    else:
        return "Error: Input is not in the alphabet"    
#real final 
finalOutput = "".join(secondVal)

#calculate some numbers and chars from a substring
amount = len(finalOutput) - round(len(finalOutput)/3)
getSubstr = finalOutput[-(amount):]
index = 0
allFactors = {

};
#loop from substring
for x in range(len(getSubstr)):
    hrhe = re.sub(r'\d', 'a', ''.join(e for e in getSubstr[index] if e.isalnum())).replace(" ", "a").lower()
    print(hrhe)
    #print(str(turnFromAlphabet("a", 0)) + "demo")
    alpInt = turnFromAlphabet(hrhe, 0)
    print(alpInt)
    #get factors
    oneDimensionFactors = []
    for p in range(2,alpInt):
        # if mod 0
        if(alpInt % p) is 0:
            oneDimensionFactors.append(p)
    else:
        oneDimensionFactors.append(1)
    indexP = 0
    for z in oneDimensionFactors:
        allFactors.setdefault("index{0}".format(index), {})["keyNumber"+str(p)] = z

    index+=1
print(allFactors)
python python-3.x random output
1个回答
0
投票

我认为您收到消息“错误:输入不在字母中,因为您的enc()更改了某些字符。但是它们变成的字符(例如'@','4'或'!')不在alp中定义的turnFromAlphabet()变量中。我不知道您要如何解决。由您决定。

但是我不得不说您的代码很难理解,这可以解释为什么您难以调试或者为什么其他人可能不愿意为您提供帮助。我试图通过删除没有任何影响的代码来理解您的代码。但即使最后,我也不确定我是否理解您的尝试。这是我对您的代码的了解:

import random
import re

#username = "oogi esjabjbb" 
username = "oogisjab" #i defined it already for question purposes

def transform_case(character):
    character_cases = ('upper', 'lower')
    character_to_return = character.upper() if random.choice(character_cases) == 'upper' else character.lower()
    return character_to_return

username_character_cases_modified = "".join(transform_case(current_character) for current_character in username)

def encode(character_to_encode):
    translation_table = {
        'a' : '@',
        'A' : '4',
        'O' : '0',
        'E' : '3',
    }
    character_translated = translation_table.get(character_to_encode, None)
    if character_translated is None:
        character_translated = character_to_encode
    if character_translated == ' ':
        character_translated = '!' if random.choice((True, False)) else '_'
    return character_translated

final_output = "".join(encode(current_character) for current_character in username_character_cases_modified)

amount = round(len(final_output) / 3)
part_of_final_output = final_output[amount:]

all_factors = {}
for (index, current_character) in enumerate(part_of_final_output):
    hrhe = current_character 
    if not hrhe.isalnum():
        continue
    hrhe = re.sub(r'\d', 'a', hrhe)
    hrhe = hrhe.lower()
    print(hrhe)

    def find_in_alphabet(character, offset):
        alphabet = "abcdefghijklmnopqrstuvwxyz"
        place_found = alphabet.find(character)
        if place_found == -1 or not character:
            raise ValueError("Input is not in the alphabet")
        else:
            place_to_return = place_found + offset + 1
        return place_to_return

    place_in_alphabet = find_in_alphabet(hrhe, 0)
    print(place_in_alphabet)

    def provide_factors(factors_of):
        for x in range(1, int(place_in_alphabet ** 0.5) + 1):
            (quotient, remainder) = divmod(factors_of, x)
            if remainder == 0:
                for current_quotient in (quotient, x):
                    yield current_quotient

    unique_factors = set(provide_factors(place_in_alphabet))
    factors = sorted(unique_factors)

    all_factors.setdefault(f'index{index}', dict())[f'keyNumber{place_in_alphabet}'] = factors 

print(all_factors)

您想做什么附近吗?

© www.soinside.com 2019 - 2024. All rights reserved.