Ola, estou tentando que meu programa avalie 3 variaveis em um arquivo de texto.
As variaveis sao:
X = 0.9
Y = 1.5
Z = 2.0
Consigo ler o arquivo e "printar", mas quando tento avaliar a variavel, como:
if X>1:
print("Variavel X maior que 1")
O programa diz que ela nao foi definida.
Como posso resolver ?
Como você importou o arquivo externo?
Digamos que estas variáveis foram definidas no arquivo ext.py
então, você deve importar o arquivo escrevendo
import ext
Assim, sempre que for acessar uma variável ou função dentro do arquivo, você deve utilizar ext.
como prefixo. Por exemplo:
ext.X
é utilizado para acesar a variável X
no arquivo ext.py
. Com isso, seu desvio condicional deve ser parecido com
if ext.X > 1:
print("A variavel X é maior que 1")
Qual o resultado de print(X) ?
Veja os tipos de dados do Python primeiramente
REF: Tipos de Dados básicos em C
Números inteiros, float, double são comparados de maniera diferente do que uma String / Texto.
O seu arquivo de texto:
"
X = 0.9
Y = 1.5
Z = 2.0
"
Sendo uma string, voce pode procurar por um texto igual ou semelhante ( if 'procuro' in texto ), buscar pelo indice de alguma letra ou sub-string.
Até aqui OK ?
Já os número são guardados na memoria de maneira diferente! Por isso é necessário converter ( PARSE / CASTING ) para cada valor.
OPÇÂO: Se não quiser fazer isso pode utilizar a biblioteca JSON. Más é necessário respeitar a estrutura do JSON.
Não irei entrar em detalhe sobre de como os números são armazenados.
Nesse caso específico. Corte a string até chegar no número que você quer.
Poderia utilizar os nomes das variáveis como uma chave de um dicionário por exemplo. Existem inumeras maneiras de resolver !
# Lê o arquivo de texto
with open('seuarquivo.txt', 'r') as arquivo:
linhas = arquivo.readlines()
# Inicializa as variáveis
X = 0.0
Y = 0.0
Z = 0.0
# Itera sobre as linhas do arquivo e atribui os valores às variáveis
for linha in linhas:
if linha.startswith('X'):
X = float(linha.split('=')[1].strip())
elif linha.startswith('Y'):
Y = float(linha.split('=')[1].strip())
elif linha.startswith('Z'):
Z = float(linha.split('=')[1].strip())
# Agora você pode usar as variáveis normalmente
if X > 1:
print("Variável X maior que 1")
if Y > 1:
print("Variável Y maior que 1")
if Z > 1:
print("Variável Z maior que 1")
O erro ocorre porque você está tentando acessar as variáveis `X`, `Y`, `Z` diretamente, mas elas não estão sendo definidas ou carregadas corretamente a partir do arquivo de texto. Quando você lê um arquivo, você recebe os dados como strings, e para usá-los como números (no caso, `float`), você precisa fazer a conversão apropriada.
Vou te dar um exemplo passo a passo para garantir que o seu programa leia corretamente as variáveis do arquivo de texto, converta-as para números e as avalie corretamente.
### Exemplo de Código
Vamos imaginar que você tem um arquivo de texto chamado **"variaveis.txt"**, com o seguinte conteúdo:
```
X=0.9
Y=1.5
Z=2.0
```
Agora, o objetivo é ler essas variáveis do arquivo e avaliá-las. Veja o código:
```python
# Função para ler e atribuir valores das variáveis X, Y, Z de um arquivo
def ler_variaveis_do_arquivo(nome_arquivo):
variaveis = {} # Dicionário para armazenar as variáveis
with open(nome_arquivo, 'r') as arquivo:
for linha in arquivo:
# Divide a linha no sinal de igual
chave, valor = linha.strip().split('=')
# Converte o valor para float e armazena no dicionário
variaveis[chave] = float(valor)
return variaveis
# Lê as variáveis do arquivo
variaveis = ler_variaveis_do_arquivo('variaveis.txt')
# Acessa as variáveis X, Y e Z
X = variaveis['X']
Y = variaveis['Y']
Z = variaveis['Z']
# Avalia se X é maior que 1
if X > 1:
print("Variável X maior que 1")
# Avalia se Y é maior que 1
if Y > 1:
print("Variável Y maior que 1")
# Avalia se Z é maior que 1
if Z > 1:
print("Variável Z maior que 1")
```
### Explicação:
1. **Função `ler_variaveis_do_arquivo`**:
- A função abre o arquivo e lê linha por linha.
- Cada linha é dividida pelo sinal de igual (`=`) para separar o nome da variável e o valor.
- O valor é convertido para `float` para poder ser comparado numericamente e armazenado em um dicionário (`variaveis`).
2. **Leitura das variáveis**:
- Após ler os dados, as variáveis `X`, `Y` e `Z` são recuperadas do dicionário e atribuídas às variáveis correspondentes.
3. **Avaliação das variáveis**:
- O código realiza a comparação (`X > 1`, `Y > 1`, `Z > 1`) e imprime uma mensagem quando a condição é atendida.
### O que deve acontecer:
Se o arquivo `variaveis.txt` contiver os valores que você forneceu (`X=0.9`, `Y=1.5`, `Z=2.0`), a saída será:
```
Variável Y maior que 1
Variável Z maior que 1
```
### Como garantir que tudo funcione:
- **Formato do arquivo**: O arquivo de texto deve ter o formato correto, como `X=0.9`, `Y=1.5`, `Z=2.0`, sem espaços extras antes ou depois dos valores.
- **Conversão para float**: Como as variáveis são armazenadas como texto no arquivo, você deve garantir que os valores sejam convertidos para `float` para permitir a comparação numérica.
- **Verificação de existência da chave**: Caso você queira garantir que a chave existe no dicionário antes de acessá-la, pode usar `variaveis.get('X', default_value)` para evitar erros se alguma chave estiver faltando no arquivo.
Se precisar de mais alguma ajuda ou se houver mais detalhes sobre o seu código, estou à disposição!