String index out of range in Python

ola, estou aprendendo PYTHON, e resolvi fazer por conta própria contando com ecarros,modelo,ano,tipo,marca,preco e o site que peguei como referência.

estava fazendo,e,hora de testar,ele estava funcionando normalmente,até chegar no elif 5.
DESDE então, por algum motivo,que eu to quebrando a cabeça, o codigo so exibe o elif 2,não importa a opção que eu escolha.

alguém poderia me ajudar ?
texto em negrito’'‘veiculo =[]
marca = []
modelo = []
ano = []
tipo = [‘sedan’,‘hatch’,‘svu’,‘picape’,‘colecionador’,‘clássicos’]
preco = []
site = [‘lartbr.com.br’]
‘’’

ford_classico = input(‘Escolha seu modelo clássico da Ford’)
veiculo = input([“Digite 1 para Belina”,“2 para Corcel”," 3 para Coupé Deluxe",“4 para Escort”,“5 para Galaxie”,“e 6 para Mustang”])
marca = [‘Alfa Romeo’,‘Aston Martin’,‘BMW’,‘Chevrolet’,‘Dodge’,‘Ford’]
modelo = [‘II L’,‘Deluxe’,‘Guarujá’,‘Galaxie’,‘Fastback’]
ano = [‘1940’,‘1965’,‘1969’,‘1973’,‘1983’,‘1984’,‘1992’]
tipo = [‘sedan’,‘hatch’,‘svu’,‘perua’,‘picape’,‘convercível’,‘compacto’,‘colecionador’,‘clássicos’]
preco = [‘R$55000’,‘R$250000’,‘R$39000’,‘R$210000’,‘620000’]
site = [‘lartbr.com.br’,]

if ford_classico == ‘1’:
print(veiculo[0],marca[5],modelo[0],tipo[3],ano[5],preco[0],site[0])

elif 2:
print(veiculo[1],marca[5],modelo[0],tipo[3],ano[4],preco[0],site[0])

elif 3:
print(veiculo[2],marca[5],modelo[1],tipo[5],ano[0],preco[1],site[0])
elif 4:
print(veiculo[3],marca[5],modelo[2],tipo[6],ano[6],preco[2],site[0])

elif 5:
print(veiculo[4],marca[5],modelo[3],tipo[0],ano[2],preco[3],site[0])

elif 6:
print(veiculo[5],marca[5],modelo[4],tipo[5],ano[1],preco[4],site[0])

elif 2

Isso está errado. Você não está testando se o valor da variável é 2. Vc está testando o próprio 2!

Em Python, qualquer valor pode ser usado em um contexto booleano. Ou seja, posso fazer algo como if 2: ou elif 2:. E segundo as regras da linguagem, qualquer número diferente de zero é considerado “verdadeiro”.

Ou seja, no seu código:

if ford_classico == '1':
    print(veiculo[0],marca[5],modelo[0],tipo[3],ano[5],preco[0],site[0])
elif 2:

Se ford_classico for '1', ele entra no if. Mas se não for '1', ele testa elif 2, e como qualquer número diferente de zero é considerado “verdadeiro”, vai entrar nesse elif e nem vai testar os demais. Então o certo deveria ser:

if ford_classico == '1':
    print(veiculo[0],marca[5],modelo[0],tipo[3],ano[5],preco[0],site[0])
elif ford_classico == '2':
# etc...

Tem outros problemas também. Vc faz veiculo = input(etc e depois faz veiculo[0]. Mas o retorno de input é sempre uma string, então veiculo[0] pega o primeiro caractere desta string. Não sei qual foi a intenção aqui, mas acho que não faz sentido isso.

E em vez de ter várias listas separadas, seria melhor agrupar os dados de cada veículo (por exemplo, usando tuplas):

# cada veículo tem uma tupla contendo nome, marca, modelo, etc
veiculos = [
    ('Alfa Romeo', 'Deluxe', 1940, 'sedan', 55000), # ano e preço podem ser números, faz mais sentido
    ('Corcel', 'Galaxie', 1983, 'colecionador', 39000)
]

Quanto ao erro “String index out of range”, provavelmente é por causa do que falei acima:

veiculo = input( - o que acontece é que input retorna uma string.

Mais abaixo, vc tenta acessar veiculo[0], veiculo[1], etc, ou seja, está acessando caracteres da string em posições específicas (0 é a posição do primeiro caractere, 1 é a posição do segundo, etc). Mas se, por exemplo, a string digitada tiver apenas um caractere (vc digitou só “a” e deu ENTER) e vc tenta acessar o segundo, dá o erro de “index out of range”.

1 curtida

muito obrigada,vou tentar fazer isso, e depois coloco aqui o resultado!
nossa me ajudou muito!
muito obrigada mesmo!

muito obrigada! vou fazer o que você falou, e depois coloco aqui o resultado!
muito obrigada novamente!

outra duvida…como eu faço pra acessar e exibir os itens da lista? sou iniciante em python