Bug de calculo em aplicacao simples [RESOLVIDO]

1. Bug de calculo em aplicacao simples [RESOLVIDO]

Gustavo Enrico Machado Dantas
GuDantas

(usa Kali)

Enviado em 01/10/2020 - 10:32h

Ola primeiramente desculpe os erros de portugues meu teclado nao e brasileiro, acontece que quando fui rodar um programa reparei que ele nao fazia o calculo de divisao corretamente dando sempre 0 ou 1 porem quando fui rodar a mesma aplicacao em um compilador online ele funcionou corretamente quem puder me ajudar so agradeco, segue o codigo (o bug fica no calculo da assiduidade (assid))

nome = str(raw_input('Digite o nome do aluno: '))
nota1 = float(input('Digite a nota da Prova: '))
nota2 = float(input('Digite a nota da Prova 2: '))
faltas = int(input('Digite o total de faltas: '))

media = (nota1 + nota2)/2
assid = (20-faltas)/20

if media >= 6 and assid >=0.7:
resultado = 'Aprovado'

elif media <6 and assid <0.7:
resultado ='Reprovado por media e por faltas'

elif media < 6:
resultado = 'Reprovado por media'

elif assid < 0.7:
resultado = 'Reprovado por faltas'

else:
print('Erro')

print('Nome',nome)
print('A media e ',media)
print('Assiduidade',assid)
print('Resultado:',resultado)


Obs: Nao sou nenhum profissional em python desculpe por gastar seu tempo em um erro simples se for o caso


  


2. Re: Bug de calculo em aplicacao simples [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 01/10/2020 - 11:21h

Vc pega a variavel faltas e converte p int. Assim recebe atribuição de 20 - faltas (int) e divide por int. O resultado é uma divisão inteira. Vc deveria pegar faltas como float p fazer a divisão converter p float.


3. Re: Bug de calculo em aplicacao simples [RESOLVIDO]

Adriano Christi
ACMM

(usa Linux Mint)

Enviado em 01/10/2020 - 20:56h

GuDantas escreveu:

Ola primeiramente desculpe os erros de portugues meu teclado nao e brasileiro, acontece que quando fui rodar um programa reparei que ele nao fazia o calculo de divisao corretamente dando sempre 0 ou 1 porem quando fui rodar a mesma aplicacao em um compilador online ele funcionou corretamente quem puder me ajudar so agradeco, segue o codigo (o bug fica no calculo da assiduidade (assid))

nome = str(raw_input('Digite o nome do aluno: '))
nota1 = float(input('Digite a nota da Prova: '))
nota2 = float(input('Digite a nota da Prova 2: '))
faltas = int(input('Digite o total de faltas: '))

media = (nota1 + nota2)/2
assid = (20-faltas)/20

if media >= 6 and assid >=0.7:
resultado = 'Aprovado'

elif media <6 and assid <0.7:
resultado ='Reprovado por media e por faltas'

elif media < 6:
resultado = 'Reprovado por media'

elif assid < 0.7:
resultado = 'Reprovado por faltas'

else:
print('Erro')

print('Nome',nome)
print('A media e ',media)
print('Assiduidade',assid)
print('Resultado:',resultado)


Obs: Nao sou nenhum profissional em python desculpe por gastar seu tempo em um erro simples se for o caso




Bom aqui funcionou como esperado.
Uma sugestão que eu dou, é que evite usar o raw_input pois, se eu não estiver enganado, ele é um recurso do Python 2 que não está mais ativo no Python 3. Claro, use-o caso esteja trabalhando com Python 2. Use apenas da seguinte forma nesse código nome = input('Digite o nome do aluno: '). A função input, por padrão no Python, gera uma string.
Quanto a divisão no Python, existem duas formas de efetuar uma divisão: uma para exibir o resultedo real, ou seja, caso os valores não gerem como resultado um quociente diferente de 0 (zero), o valor de resultado será um número decimal; ea outra forma de divisão no Python é a que resulta apenas no valor inteiro de um número independente se a divisão entre eles seja exata ou não, será exibido apenas a parte inteira do valor.
Se digitar em um terminal ou IDE do Python o seguinte código:
a = 5
b = 2
c = a / b
d = a // b

print(f"O valor de c será {c}")
print(f"O valor de d será {d}")


A saída será:
O valor de c será 2.5
O valor de d será 2


O uso de apenas uma barra para dividir dois números sempre terá como resultado um float e o uso de duas barras em uma divisão de dois números sempre terá como resultado a parte inteira do valor mesmo que esse tenha uma parte decimal.

Eu reescrevi o código e ficou da seguinte forma:

nome = input('Digite o nome do aluno: ')
nota1 = float(input('Digite a nota da Prova: '))
nota2 = float(input('Digite a nota da Prova 2: '))
faltas = int(input('Digite o total de faltas: '))

media = (nota1 + nota2)/2
assid = (20-faltas)/20

if media >= 6 and assid >=0.7:
resultado = 'Aprovado'

elif media <6 and assid <0.7:
resultado ='Reprovado por media e por faltas'

elif media < 6:
resultado = 'Reprovado por media'

elif assid < 0.7:
resultado = 'Reprovado por faltas'

else:
print('Erro')

print('Nome',nome)
print('A media e ',media)
print('Assiduidade',assid)
print('Resultado:',resultado)


Não houve grande mudança e funcionou como deveria.
Espero que ajude.

Guns don't kill people. People kill people.


4. Re: Bug de calculo em aplicacao simples [RESOLVIDO]

Lisandro Guerra
Lisandro

(usa Linux Mint)

Enviado em 06/10/2020 - 15:35h

Python 2.x e Python 3.x tratam a divisão de forma diferente.

Python 2.x :


Python 2.7.18rc1 (default, Apr 7 2020, 12:05:55)
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0
>>>


Python 3.x :


Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0.5
>>>


A não ser que você esteja trabalhando em um sistema legado (ai é caso de procurar outro emprego) use Python 3.x , pois já estamos na versão 3.9 e em 18 meses estaremos na 4.0. A versão 2 não tem mais nenhum suporte.

Abraço


5. Re: Bug de calculo em aplicacao simples [RESOLVIDO]

Adriano Christi
ACMM

(usa Linux Mint)

Enviado em 08/10/2020 - 00:37h

Lisandro escreveu:

Python 2.x e Python 3.x tratam a divisão de forma diferente.

Python 2.x :


Python 2.7.18rc1 (default, Apr 7 2020, 12:05:55)
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0
>>>


Python 3.x :


Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0.5
>>>


A não ser que você esteja trabalhando em um sistema legado (ai é caso de procurar outro emprego) use Python 3.x , pois já estamos na versão 3.9 e em 18 meses estaremos na 4.0. A versão 2 não tem mais nenhum suporte.

Abraço



Bem lembrado, Lisandro. Eu usei bem poucas vezes o Python 2 e por isso eu esqueci desse detalhe, mas é importante.

Guns don't kill people. People kill people.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts