LIST_NAME [-1] предлагает "]" python - PullRequest
2 голосов
/ 31 октября 2019

Я очень плохо знаком с Python 3 (и Python в целом), и я решил попытаться сделать шифр и дешифр по-своему, как личный проект. Шифр работает, генерируя случайное число и умножая на него значение числа букв. Он добавляет все эти умноженные значения в список, а затем добавляет случайное число в конце.

Допустим, этот список [1976, 1995, 19]. Пользователь скопирует и вставит это во вход и нажмет ввод

dlist = list(input('Text to be Decyphered:'))

. Затем функция примет последнее значение в списке и передаст переменной rnd значение. Затем он удалит это значение из списка. После этого он разделит остальные значения на rnd. Проблема в том, что

dlist[-1]

возвращается с ']'

import string
import random
from random import randrange
def cypher():
    rinput = input('Write Text to be Cyphered: ')
    rnd = randrange(0, 100)
    rinput = rinput.lower()
    output = []
    for character in rinput:
        number = ord(character) * rnd
        output.append(number)
    output.append(rnd)
    print(output)
def decypher():
    dlist = list(input('Text to be Decyphered:'))
    rnd = dlist[-2]
    rnd = int(rnd)
    dlist.pop()
    a = 1
    out = ""
    for number in dlist:
        vlc = int(dlist[a])
        vnum = vlc/rnd
        valf = chr(vnum)
        out + valf
        a=a+1
    print(out)

Я думаю, что программа обрабатывает список как строку, потому что он исходит из кода input ().

Ответы [ 3 ]

2 голосов
/ 31 октября 2019

У вас есть несколько проблем с вашим кодом:

  1. randrange (0, 100) -> если вы получите 0, тогда ваш результат будет равен 0 и не будет работать
  2. Символами являются целые числа, умножение и деление, вы не всегда получите целое число обратно, поэтому вам нужно обработать округление
  3. Ваш ввод в cypher является строкой, но ввод decypher представляет собой список, поэтому вам нужно преобразоватьсписок обратно к строке таким образом, что вы можете разобрать ее. возможно удалите "[" и "]" разделить строку

Чтобы преобразовать строку в список, вы можете использовать что-то вроде

valToDecode = "[464, 404, 460, 464, 4]"
cleanedVal = valToDecode.strip("][").split(","))
0 голосов
/ 31 октября 2019

Попробуйте ввести json:

import json
data = json.loads(the_string)
0 голосов
/ 31 октября 2019

Когда вы используете функцию list, она преобразует строку в ['[', '1', '9', '7', '6', ',', ' ', '1', '9', '9', '5', ',', ' ', '1', '9', ']']

. Вместо этого используйте:

dlist = eval(input('Text to be Decyphered:'))

eval Функция преобразует ее в фактический список. Вы можете проверить это:

>>>print(type(eval('[1976, 1995, 19]')))
<class 'list'>
>>>print(eval('[1976, 1995, 19]'))
[1976, 1995, 19]
>>>for i in eval('[1976, 1995, 19]')
       print(i)
1976
1995
19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...