[Redução de 'If']

1. [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 24/02/2020 - 00:55h

Então pessoal, sai do java e estou "iniciando" no Python.
Queria tirar uma dúvida sobre a redução de 'IFs' no código, sei também que em alguns casos não é possível.
Estou criando uma calculadora e, nela faço a utilização de 5 'IFs', queria saber se há alguma forma de reduzi-los.

Código:

print("As sentenças podem ser escritas em uma única linha.")
print("Por exemplo: 2*2 ou 2 * 2\n")


r = 0

#Converte a lista para float
def con(n1, n2):
n1 = float(n1)
n2 = float(n2)
return n1, n2

while True:
#Pegando valor e separando-o
try:

num = input('>>> ')
if "+" in num:
pegar = num.split('+')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 + nu2)

elif "-" in num:
pegar = num.split('-')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 - nu2)


if "/" in num:
pegar = num.split('/')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 / nu2)



elif "*" in num:
pegar = num.split('*')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 * nu2)


if "^" in num:
pegar = num.split('^')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 ** nu2)

except ValueError:
print("Por favor, digite os valores de forma correta.")




  


2. Nesse caso não precisa

t4mpz
tampinha

(usa Debian)

Enviado em 24/02/2020 - 15:44h

Amigo a quantidade de IF's nesse código está perfeita, não precisa reduzir (até porque não tem nem como diminuir mais a quantidade de if's aqui). Mas sua visão foi muito boa, realmente é importante reduzir a quantidade de If's em um
código, principalmente em Python, que foi feito para trabalhar de forma mais fácil e mais legível. Portanto, como você ainda está no início do aprendizado com Python, tente fazer isso o máximo possível, para já ir se acostumando.

--Giulliano


3. Re: [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 24/02/2020 - 19:44h

Giulliano Rossi escreveu:

Amigo a quantidade de IF's nesse código está perfeita, não precisa reduzir (até porque não tem nem como diminuir mais a quantidade de if's aqui). Mas sua visão foi muito boa, realmente é importante reduzir a quantidade de If's em um
código, principalmente em Python, que foi feito para trabalhar de forma mais fácil e mais legível. Portanto, como você ainda está no início do aprendizado com Python, tente fazer isso o máximo possível, para já ir se acostumando.

--Giulliano


Obrigado pela reposta!


4. Re: [Redução de 'If']

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 24/02/2020 - 19:56h


Jhevison escreveu:

Então pessoal, sai do java e estou "iniciando" no Python.
Queria tirar uma dúvida sobre a redução de 'IFs' no código, sei também que em alguns casos não é possível.
Estou criando uma calculadora e, nela faço a utilização de 5 'IFs', queria saber se há alguma forma de reduzi-los.

Código:

print("As sentenças podem ser escritas em uma única linha.")
print("Por exemplo: 2*2 ou 2 * 2\n")


r = 0

#Converte a lista para float
def con(n1, n2):
n1 = float(n1)
n2 = float(n2)
return n1, n2

while True:
#Pegando valor e separando-o
try:

num = input('>>> ')
if "+" in num:
pegar = num.split('+')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 + nu2)

elif "-" in num:
pegar = num.split('-')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 - nu2)


if "/" in num:
pegar = num.split('/')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 / nu2)



elif "*" in num:
pegar = num.split('*')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 * nu2)


if "^" in num:
pegar = num.split('^')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 ** nu2)

except ValueError:
print("Por favor, digite os valores de forma correta.")


Boa noite Jhevison.
Não conheço o Python, mas, faria a logica diferente.
Exemplo:
Eliminando os números da entrada, temos a operação:
+, -, /, * e ^
No bash:
read -p "Entre com a operação matemática: " -a input
13*2
echo "${input[@]//[0-9]}"
Ou
sed 's/[0-9]//g' <<< "${input[@]}"
* #Operação
Desse modo , são eliminados os condicionais, que servem exclusivamente,
para identificar a "operação".
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: [Redução de 'If']

Matheus
pylm

(usa Gentoo)

Enviado em 25/02/2020 - 00:00h

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')



6. Re: [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 25/02/2020 - 03:27h

pylm escreveu:

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')


Puts, estou correndo desse método, passei o dia todo tentando criar um algoritmo para fazer operações "infinitas" como: 3 + 2 / 3 * 2 - 2 ** 5 / 3
E não consegui, estou utilizando ele por enquanto quando se tem mais de uma operação. Se alguém tiver uma ideia de como resolver isso ahsushsu


7. Re: [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 25/02/2020 - 03:39h

msoliver escreveu:


Jhevison escreveu:

Então pessoal, sai do java e estou "iniciando" no Python.
Queria tirar uma dúvida sobre a redução de 'IFs' no código, sei também que em alguns casos não é possível.
Estou criando uma calculadora e, nela faço a utilização de 5 'IFs', queria saber se há alguma forma de reduzi-los.

Código:

print("As sentenças podem ser escritas em uma única linha.")
print("Por exemplo: 2*2 ou 2 * 2\n")


r = 0

#Converte a lista para float
def con(n1, n2):
n1 = float(n1)
n2 = float(n2)
return n1, n2

while True:
#Pegando valor e separando-o
try:

num = input('>>> ')
if "+" in num:
pegar = num.split('+')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 + nu2)

elif "-" in num:
pegar = num.split('-')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 - nu2)


if "/" in num:
pegar = num.split('/')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 / nu2)



elif "*" in num:
pegar = num.split('*')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 * nu2)


if "^" in num:
pegar = num.split('^')
valor = con(pegar[0], pegar[1])
nu1, nu2 = valor
print(nu1 ** nu2)

except ValueError:
print("Por favor, digite os valores de forma correta.")


Boa noite Jhevison.
Não conheço o Python, mas, faria a logica diferente.
Exemplo:
Eliminando os números da entrada, temos a operação:
+, -, /, * e ^
No bash:
read -p "Entre com a operação matemática: " -a input
13*2
echo "${input[@]//[0-9]}"
Ou
sed 's/[0-9]//g' <<< "${input[@]}"
* #Operação
Desse modo , são eliminados os condicionais, que servem exclusivamente,
para identificar a "operação".
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________



Muito obrigado, isso foi muito útil, irei implementar no programa. Enfim, pode tirar-me uma dúvida.
Em forma de algoritmo(ou até usando alguma linguagem), sabe como eu poderia efetuar multiplos cálculos dessa forma(uma forma "infinita")
Por exemplo: 3 * 10 / 5 - 1 ** 4

Confesso que tentei fazer isso de diversas formas, mas não cheguei a esse resultado



8. Re: [Redução de 'If']

Matheus
pylm

(usa Gentoo)

Enviado em 25/02/2020 - 09:57h


Jhevison escreveu:

pylm escreveu:

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')


Puts, estou correndo desse método, passei o dia todo tentando criar um algoritmo para fazer operações "infinitas" como: 3 + 2 / 3 * 2 - 2 ** 5 / 3
E não consegui, estou utilizando ele por enquanto quando se tem mais de uma operação. Se alguém tiver uma ideia de como resolver isso ahsushsu


Qual o problema com essa expressão? É calculada normalmente.
Agora se quiser ficar pedindo ao usuário para inserir mais expressões constantemente é só usar um while



while True:
num = input('>>> ')
if num.lower() == '0':
print('Saindo...')
break
else:
print(f'O resultado de {num} é: {eval(num)}')


E se o usuário digitar 0 o programa sai.



9. Re: [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 25/02/2020 - 10:11h

pylm escreveu:


Jhevison escreveu:

pylm escreveu:

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')


Puts, estou correndo desse método, passei o dia todo tentando criar um algoritmo para fazer operações "infinitas" como: 3 + 2 / 3 * 2 - 2 ** 5 / 3
E não consegui, estou utilizando ele por enquanto quando se tem mais de uma operação. Se alguém tiver uma ideia de como resolver isso ahsushsu


Qual o problema com essa expressão? É calculada normalmente.
Agora se quiser ficar pedindo ao usuário para inserir mais expressões constantemente é só usar um while



while True:
num = input('>>> ')
if num.lower() == '0':
print('Saindo...')
break
else:
print(f'O resultado de {num} é: {eval(num)}')


E se o usuário digitar 0 o programa sai.



Cara, eu sei utilizar o eval. Mas não, eu não vou usar porque estou criando minhas próprias funções, sendo assim posso editar qualquer coisa que eu quiser e, não ficar dependendo desse método.
E eu já fiz isso, mas fiz isso num projeto antigo. Eu estou criando minhas próprias funções, pra implementar em outra coisa, o problema não é esse.



10. Re: [Redução de 'If']

Matheus
pylm

(usa Gentoo)

Enviado em 25/02/2020 - 11:16h


Jhevison escreveu:

pylm escreveu:


Jhevison escreveu:

pylm escreveu:

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')


Puts, estou correndo desse método, passei o dia todo tentando criar um algoritmo para fazer operações "infinitas" como: 3 + 2 / 3 * 2 - 2 ** 5 / 3
E não consegui, estou utilizando ele por enquanto quando se tem mais de uma operação. Se alguém tiver uma ideia de como resolver isso ahsushsu


Qual o problema com essa expressão? É calculada normalmente.
Agora se quiser ficar pedindo ao usuário para inserir mais expressões constantemente é só usar um while



while True:
num = input('>>> ')
if num.lower() == '0':
print('Saindo...')
break
else:
print(f'O resultado de {num} é: {eval(num)}')


E se o usuário digitar 0 o programa sai.



Cara, eu sei utilizar o eval. Mas não, eu não vou usar porque estou criando minhas próprias funções, sendo assim posso editar qualquer coisa que eu quiser e, não ficar dependendo desse método.
E eu já fiz isso, mas fiz isso num projeto antigo. Eu estou criando minhas próprias funções, pra implementar em outra coisa, o problema não é esse.


E o problema é...?



11. Re: [Redução de 'If']

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 25/02/2020 - 13:19h

pylm escreveu:


Jhevison escreveu:

pylm escreveu:


Jhevison escreveu:

pylm escreveu:

Da pra tirar tudo e botar um eval.

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

num = input('>>> ')

print(f'O resultado de {num} é: {eval(num)}')


Puts, estou correndo desse método, passei o dia todo tentando criar um algoritmo para fazer operações "infinitas" como: 3 + 2 / 3 * 2 - 2 ** 5 / 3
E não consegui, estou utilizando ele por enquanto quando se tem mais de uma operação. Se alguém tiver uma ideia de como resolver isso ahsushsu


Qual o problema com essa expressão? É calculada normalmente.
Agora se quiser ficar pedindo ao usuário para inserir mais expressões constantemente é só usar um while



while True:
num = input('>>> ')
if num.lower() == '0':
print('Saindo...')
break
else:
print(f'O resultado de {num} é: {eval(num)}')


E se o usuário digitar 0 o programa sai.



Cara, eu sei utilizar o eval. Mas não, eu não vou usar porque estou criando minhas próprias funções, sendo assim posso editar qualquer coisa que eu quiser e, não ficar dependendo desse método.
E eu já fiz isso, mas fiz isso num projeto antigo. Eu estou criando minhas próprias funções, pra implementar em outra coisa, o problema não é esse.


E o problema é...?


Falei disso acima






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts