TransWikia.com

Repetição for para chamar variáveis

Stack Overflow em Português Asked by user93774 on December 28, 2021

Tenho quatro variáveis [t1, t2, t3, t4], e cada uma delas foi definida como um string anteriormente.

t1 = 'A vida vai ficando cada vez mais dura perto do topo.'
t2 = 'A moralidade é a melhor de todas as regras para orientar a humanidade.'
t3 = 'Aquilo que se faz por amor está sempre além do bem e do mal.'
t4 = 'Torna-te aquilo que és.'

Se depois no código, eu quiser chamar cada uma dessas variáveis de uma só vez, pensei em fazer desta forma:

for i in range(1,5):
   print(ti)

Assim, o i seria substituido pelos números 1 a 4 e então chamaria t1, t2, t3, t4 subsequentemente. Obviamente, esse método não funciona. De fato é possível criar uma lista com os textos e então fazer:

lista = [t1, t2, t3, t4]
for i in range(1,5):
   print(lista[i])

Porém torna-se antiprático criar uma lista quando o número de variáveis é muito elevado. Minha pergunta é: existe algum modo de chamar múltiplas variáveis previamente definidas de uma vez, como funcionaria na repetição ‘for’ idealizada acima?

4 Answers

Em Python, em geral, quando se quer usar os _nomes_das_variáveis como variáveis em si, a recomendação é que se use um dicionário.

Ou seja, em vez de ter "f1, f2, f3, f4", você poderia ter um dicionário f com as chaves 1, 2, 3 ,4.

Mas claro que há outras formas - no caso você quer apenas evitar ter que repetir 4 vezes a mesma linha de código. O que você não está levando em conta é que o for do Python sempre percorre sequências, e existem várias formas de sequências - não apenas a sequência numérica retornada por range.

No caso, tudo o que você precisa é:

for var in (f1, f2, f3, f4):
    print(var)

Pronto: você cria uma sequência do tipo tupla local com as variáveis desejadas, e cada elmento da tupla é associado à variável do for - e você evita ter que repetir o print 4 vezes.

NÂO FAÇA ASSIM Mas vou incluir para fins de referência: embora você não deva fazer isso: as próprias variáveis do Python são armazenadas internamente em estruturas do tipo dicionário. Então é possível acessar variáveis programaticamente pelo nome acessando-se esses dicionários que são retornados pela chamada as funções internas globals() e locals(), respectivamente para variáveis globais e locais.

for i in range(1, 5):
    print(globals()[f"f{i}"])

Answered by jsbueno on December 28, 2021

Não tenho certeza se entendi sua dúvida, mas pelo que eu entendi você poderia usar um dicionário desta forma:

d = {'f1':1,'f2':2,'f3':3,'f4':4}
for x in range(1,5):
    print('{0} => {1}'.format('f'+str(x), d['f'+str(x)]))

e imprimir de acordo com sua vontade. Quando fosse adicionar novos valores você poderia fazer:

d['f'+str(int(max(d.keys())[1])+1)] = input()

Answered by matheusma37 on December 28, 2021

Não sei se entendi completamente, mas segue aqui uma possível resposta para esse seu problema: Se você tiver uma lista, como por exemplo:

lista = [f1,f2,f3,f4]

Tu pode utilizar a lista diretamente no for:

for i in lista:
    print(i)

a saída será:

f1
f2
f3
f4

se quiser o mesmo resultado, mas com o contador, faça:

for cont, i in enumerate(lista):
    print(cont)
    print(i)

o resultado será:

0
1
2
3
f1
f2
f3
f4

Assim, podemos resolver o seu problema utilizando um desses métodos, citados acima. Se quiser criar um vetor com números, faça:

lista2 = [] #lista vazia
for i in range(5):
    lista2.append(i)
    print(lista2)

O resultado será:

[0,1,2,3,4]

Espero ter ajudado, caso não tenha sido respondida, por favor reescreva a sua pergunta. vlw!

Answered by Edeson Bizerril on December 28, 2021

Uma opção é usar 'dict comprehensions'. Altere o valor do range e aumente o número de variáveis:

d = {'f' + str(i): 0 for i in range(5)}

Produz a seguinte saída:

{'f0': 0, 'f1': 0, 'f2': 0, 'f3': 0, 'f4': 0}

E para visualizar:

for k, v in d.items():
    print(k, v)

Produz:

f0 0
f1 0
f2 0
f3 0
f4 0

Answered by Marcelo Magalhães on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP