Почему Python 3 для l oop выводит и ведет себя по-другому? - PullRequest
0 голосов
/ 20 апреля 2020

Это генератор паролей, я не могу точно определить, где проблема, но по выводу я могу сказать, что она примерно равна turnFromAlphabet()

Функция turnFromAlphabet() преобразует алфавитный символ в свой целочисленное значение.

Модуль random, я думаю, здесь ничего не делает, поскольку он просто решает, следует ли преобразовывать символ в строке в верхний или нижний регистр. И если строка либо в одном, то при отправке или передаче в turnFromAlphabet() она сначала преобразуется в нижний регистр, чтобы избежать ошибок, но все еще есть ошибки.

КОД:

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)

1 Ответ

0 голосов
/ 25 апреля 2020

Я думаю, что вы получаете сообщение "Ошибка: ввод не в алфавите", потому что ваш 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)

Это то, что вы хотели сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...