Как исправить небольшие, но важные ошибки Python? - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я пытаюсь создать программу для кодирования, имитирующую веб-сайт "Библиотеки Вавилона".В основном то, что он делает сейчас, это то, что он генерирует псевдослучайную строку букв, основанную на kew, и позволяет пользователю искать строку в «библиотеке» (сейчас это позволяет использовать не более четырех символов).Поиск, где у меня проблемы.В основном, как я запускаю функцию (см. Ниже), находя значение «ключа», которое будет выводить определенную строку.Однако иногда при поиске строк выше по алфавиту ключ возвращает измененную строку (например, «lurz -> lury», «zzzz -> zzzy»).
ВАЖНОЕ РЕДАКТИРОВАНИЕ: ifВы пытаетесь запустить код, игнорируя случайные буквы: ошибка появляется после ввода поискового запроса (он появляется только после ввода оригинального ключа).Если вы повторно введете ключ, полученный из поискового термина, в поле ввода ключа, первые четыре буквы случайных букв, которые вы получите, ДОЛЖНЫ быть вашим поисковым вводом.Это кажется мне ошибкой округления - мой код прилагается ниже.Как я могу это исправить?

from __future__ import division
import math
__author__ = 'asaflebovic'
def getFactor(x, var):
    facs = []
    i = 0
    while i < x/2:
        if i % x ==0:
            facs.append(i)
            i = i+1
            print(i)
        print(i)
        i= i + 1
    var = max(facs)
def getRandStr(x,y):
    x = float(x)
    x = ((1664525*x + 1013904223)) % 4294967296
    #print(x)
    nums = [x]
    for i in range(1,2000):
        x = ((1664525*nums[i-1] + 1013904223)) % 4294967296
        nums.append(x)
    #print(nums)
    hold = ''.join(str(e) for e in nums)
    hold = (str(hold).replace('.', ''))
    hold = str(hold)
    hold2 = ""
    count = 0
    count2 = ""
    #print(hold)
    mssg = []
    for i in range(1,(int(math.ceil(len(hold)/2)))):
        count = hold[(2*i)-2]
        count2 = count
        #print("countval:" + count)
        count = hold[(2 * i) - 1]
        #print("countval:"+count)
        count2 = count2 + count
        #print("count2val:"+count2)
        hold2 = str(count2)
        hold2 = int(hold2) % len(abc)
        #print("each letter:"+abc[int(hold2)])
        mssg.append(abc[hold2])
    print(''.join(str(e) for e in mssg))
def getAndCheck(x):
    holding = []
    mods = []
    cells = {}
    for i in range(0,len(x)):
        if x[i] in abc:
            holding.append(((((len(abc)))+((abc.index(x[i]))%len(abc)))))
            #print(len(abc))
            #print((len(abc))+(abc.index(x[i])))
            #print("in abc, it is "+str(holding))
        else:
            print("error: not found")
    #print("len: "+str(len(holding)))
    for i in range(0, len(holding)):
        cells[((i + 4) - (i % 4)) / 4] = ""
    for i in range(0, len(holding)):
        cells[((i+4)-(i%4))/4] = str(cells[((i+4)-(i%4))/4])+str(holding[i])
        #print("dict is: "+str(cells))
    holding = 0
    print(holding)
    newkey = (int(cells[1]) + 4294967296 - 1013904223) / 1664525
    print(newkey)
    newmul = {}
    for i in range(1,len(cells)):
        newmul[i]=[((1664525 * ((int(cells[i])+1013904223)) - 4294967296))]
    print(newmul)

    print("Your key is "+str(newkey)+". DON'T LOSE IT.")
    exacts = {}
    for i in range (1, int(math.ceil(len(newmul)/4))):
        exacts[(i+4)/4] = ""
abc = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
       "w", "x", "y", "z", " ", "?", "!", "-", ",", "."]
key = input("Key: ")
library = ""
#s = raw_input("Would you like a random, or exact location? (R or E)")
#if s.upper() == "E":
    #section = input("section: ")
    #shelf = input("shelf: ")
    #volume = input("volume: ")
    #page = input("page: ")
    #library = section + shelf + volume + page
getRandStr(key, library)
key = input("Search")
getAndCheck(key)
...