Встроенные.ValueError: 0 нет в списке

У меня есть этот код до сих пор:

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']
letra — целое число, а не одна из букв в cad. Вместо этого вы, вероятно, хотите for letra in cad:.
chepner 10.12.2020 16:36

используйте print(letra), чтобы увидеть свою проблему - вы получаете числа от range(), а не символы от cad

furas 10.12.2020 16:43

@chepner Действительно, теперь он работает, но возвращает только 1 значение, первое значение. Он не работает по всему списку.

Geo 10.12.2020 16:43

у вас неправильный отступ - return находится внутри for-цикла - поэтому он выходит из этого цикла после первого элемента

furas 10.12.2020 16:44

Потому что return вызывает немедленный возврат функции; он не «накапливает» значения, которые будут возвращены, как только вы достигнете конца функции.

chepner 10.12.2020 16:44

@chepner Спасибо! Я понимаю сейчас! Но не могли бы вы помочь мне с примером?

Geo 10.12.2020 16:50

@furas я изменил '''возврат''', но теперь дает одно значение, но неправильное значение

Geo 10.12.2020 16:53

когда я заменяю return на print в той же позиции, он возвращает все значения (2, 0, 13, 19, 14, 17). Все верно. но я не должен использовать печать

Geo 10.12.2020 16:56

похоже, вы не умеете работать со многими значениями - вам нужно использовать список. Перед циклом создайте пустой список, внутри цикла добавьте значение в этот список (вместо print()), а после цикла у вас будет список со всеми значениями - как вы и ожидали.

furas 10.12.2020 16:59

@furas спасибо! Действительно большое спасибо! Оно работает! И теперь я знаю немного больше. Маленькие шаги. Я только начинающий студент, первокурсники. Еще раз спасибо!

Geo 10.12.2020 17:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
210
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых: 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

Другие вопросы по теме