У меня есть этот код до сих пор:
def alfabeto_deslocado(deslocamento):
letra_inicial = 97 + deslocamento #1a letra deslocada
alfa_lista_deslo = (list(map(chr, range(letra_inicial, 123)))) #lista deslocada até 'z'
alfa_lista_resto = (list(map(chr, range(97, letra_inicial)))) #resto lista desde 'a'
return alfa_lista_deslo + alfa_lista_resto
def encripta_cadeia(cad, chave):
###Encriptar###
cad_chave = repete_chave(cad, chave) #ok
coluna_linha_tab = alfabeto_deslocado(0)
lista_cad = list(cad)
lista_cad_chave = list(cad_chave)
lista_chave = list(chave)
ind_lista_cad_chave = [i for i, valor in enumerate(lista_cad_chave)]
ind_lista_cad = [i for i, valor in enumerate(lista_cad)]
for letra in range(len(cad)):
indice = alfabeto_deslocado(0).index(letra)
return indice
Код не закончен, но во время тестирования цикл for продолжает показывать ошибку «builtins.ValueError: 0 is not in list»
for letra in range(len(cad)):
indice = alfabeto_deslocado(0).index(letra)
return indice
Пример (cad, chave) = encripta_cadeia('cantor', 'cima')
alfabeto_deslocado (0)
['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']
используйте print(letra)
, чтобы увидеть свою проблему - вы получаете числа от range()
, а не символы от cad
@chepner Действительно, теперь он работает, но возвращает только 1 значение, первое значение. Он не работает по всему списку.
у вас неправильный отступ - return
находится внутри for
-цикла - поэтому он выходит из этого цикла после первого элемента
Потому что return
вызывает немедленный возврат функции; он не «накапливает» значения, которые будут возвращены, как только вы достигнете конца функции.
@chepner Спасибо! Я понимаю сейчас! Но не могли бы вы помочь мне с примером?
@furas я изменил '''возврат''', но теперь дает одно значение, но неправильное значение
когда я заменяю return на print в той же позиции, он возвращает все значения (2, 0, 13, 19, 14, 17). Все верно. но я не должен использовать печать
похоже, вы не умеете работать со многими значениями - вам нужно использовать список. Перед циклом создайте пустой список, внутри цикла добавьте значение в этот список (вместо print()
), а после цикла у вас будет список со всеми значениями - как вы и ожидали.
@furas спасибо! Действительно большое спасибо! Оно работает! И теперь я знаю немного больше. Маленькие шаги. Я только начинающий студент, первокурсники. Еще раз спасибо!
Во-первых: range(len(cad))
дает вам числа (0,1,2...), а не символы из cad
. Эй
for letra in cad:
У вас неправильный отступ - return
находится внутри for
-цикла - поэтому он выходит из этого цикла после первого элемента. Вы должны использовать return
после цикла.
Похоже, вы не умеете работать со многими значениями - вам следует использовать список.
Перед циклом создайте пустой список для всех значений, которые вы будете создавать в цикле.
Внутренний цикл добавляет значение в этот список (вместо print()
),
И после цикла у вас будет список со всеми значениями - как вы ожидаете.
Что-то вроде этого:
# --- before loop ---
results = []
# --- loop ---
for letra in cad:
indice = alfabeto_deslocado(0).index(letra)
results.append(indice)
# --- after loop ---
#print(results)
return results
letra
— целое число, а не одна из букв вcad
. Вместо этого вы, вероятно, хотитеfor letra in cad:
.