Случайные входные данные в созданный список

#python

#python

Вопрос:

Создайте программу, которая вводит случайные символы в ранее созданный список, затем сможет развернуться и извлечь их.

Переменные originalText — это список чисел, представляющих символ, в то время как key — это список чисел, чтобы программа знала, сколько вводить.

Мой первоначальный план состоял в том, чтобы взять исходный текст, ввести первое значение в новый список, добавить x количество «материала» после, пока он не закончится. После ввода «stuff» будет введен другой символ originaltext, прежде чем снова выполнять цикл, пока в originalText не закончатся значения для добавления в modifiedText.

Этот код мог выполняться, но он не был последовательным. Моя проблема номер 1 заключалась в том, что вся информация originalText была помещена в конец modifiedtect, что не позволяло ей «раскручиваться» (извлекать «материал») должным образом.

Я думаю, что это математическая проблема. Есть предложения?

Спасибо!

 def fixStuff(originalText, key, direction):
#0 adds Stuff, 1 removes Stuff
generate = key[4] #= getMod(key,4) #this variable is used for deciding how much Stuff to input.

originalSize = len(originalText)
print(originalSize)
random.randint(32,126) #used to generate random characters. 

i = 1 #used for counting
origSpot = 0 #used to track position in original list

modifiedText = []
print(generate)

if direction is 0:
    #originalSize = originalSize * generate # the total size of the array after Stuff.
    print("inserting Stuff")

    while origSpot < originalSize: #whatever this is
        #after every originalSize digit, input generate(th) digits

        print(origSpot)
        modifiedText.insert((i),originalText[origSpot])
        x = 0 #used for inserting. It must be reset before this while runs again. 
        while x <= generate:
            modifiedText.insert((i),random.randint(32,126))
            x = x   1

            #print(x)
       #print(i)
        i = i   generate #increment the gradiant so we dump the next load of Stuff after the next real digit
        origSpot = origSpot   1

i = 0
if direction is not 0:
    print("remove el Stuffo")

        #take every generate(th) digit and put it in a new array.
    while origSpot < originalSize: #whatever this is
        #after every originalSize digit, input generate(th) digits

        print(origSpot)
        modifiedText.insert((i),originalText[origSpot])
        x = 0 #used for inserting. It must be reset before this while runs again. 
        while x <= generate:
            origSpot = origSpot   1
            x = x   1

            #print(x)
       #print(i)
        i = i   1 #increment the gradiant so we dump the next load of Stuff after the next real digit
        print("ree!")

return modifiedText
  

Комментарии:

1. Можете ли вы привести пример вызова fixStuff? Чего вы ожидаете и что получаете вместо этого?

2. Пожалуйста, пример ввода и ожидаемый результат

Ответ №1:

Делает ли это то, что вы хотите?

 import random


def addStuff(originalText, n):
    """
    returns a list with n random characters inserted after each element in originalText
    """
    modifiedText = []
    for elem in originalText:
        modifiedText.append(elem)
        for _ in range(n):
            modifiedText.append(chr(random.randint(32, 126)))
    return modifiedText


def removeStuff(modifiedText, n):
    """return a list with every (n 1)th char in modifiedText.
    Undoes the action of addStuff
    """
    originalText = []
    for i in range(0, len(modifiedText), n   1):
        originalText.append(modifiedText[i])
    return originalText


v = addStuff("hello", 2)
print(v)
# prints e.g. ['h', 'm', 'w', 'e', '^', '0', 'l', '>', 'Q', 'l', '/', '}', 'o', '6', 'L']
r = removeStuff(v, 2)
print(r)  # ['h', 'e', 'l', 'l', 'o']
  

Я разделил работу на две функции, поскольку они выполняют две разные, непересекающиеся задачи. Я создал список, используя циклы append и for. Вы можете сделать это с помощью цикла while, но, я думаю, цикл for менее подвержен ошибкам. Просто для полноты картины, вот версия цикла while:

 def addStuff(originalText, n):
    """
    returns a list with n random characters inserted after each element in originalText
    """
    modifiedText = []
    i = 0
    while i < len(originalText):
        modifiedText.append(originalText[i])
        x = 0
        while x < n:
            modifiedText.append(chr(random.randint(32, 126)))
            x = x   1
        i = i   1
    return modifiedText


def removeStuff(modifiedText, n):
    """return a list with every (n 1)th char in modifiedText.
    Undoes the action of addStuff
    """
    originalText = []
    i = 0
    while i < len(modifiedText):
        originalText.append(modifiedText[i])
        # skipping over n random elements
        i = i   1   n
    return originalText