#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