[INICIANTE] Lógica de programação - Ajuda - Lógica de um Exercício da Python Brasil - ESTRUTURA DE DECISÃO

3,789 views
Skip to first unread message

Luiz Felipe

unread,
Oct 6, 2015, 12:04:38 PM10/6/15
to Python Brasil
Olá pessoal ! 

Estou começando a programar e optei pela linguagem Python. Graças ao grande Eric Hideki e Fernando Masanori.

Bom estou iniciando este tópico para pedir um auxílio de uma questão proposta pelo site Python Brasil.

A questão é a seguinte:

Faça um Programa que leia um número inteiro menor que 1000 e imprima a quantidade de centenas, dezenas e unidades do mesmo.
  • Observando os termos no plural a colocação do "e", da vírgula entre outros. Exemplo:
  • 326 = 3 centenas, 2 dezenas e 6 unidades
  • 12 = 1 dezena e 2 unidades Testar com: 326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10, 21, 11, 1, 7 e 16


Estou fazendo o código e não sei se a melhor lógica é essa :s O grande problema é a questão da vírgula haha

Obs: Estou programando com as estruturas de decisões somente, pois  foi até aqui que cheguei.

Segue o código:

# -*- coding: utf-8 -*-

numero,decimal = raw_input("\nDigite uma numero inteiro menor que 1000 e no máximo duas casas decimais separadas por ponto: ").split('.')

qtdnumero = len(numero)
qtddecimal = len (decimal)

if (qtdnumero == 3 and qtddecimal == 2) or (qtdnumero == 3 and qtddecimal == 1) or qtdnumero == 3:

    centena = numero[:1]
    dezena = numero [1:2]
    unidade = numero [2:3]
    decimo = decimal [:1]
    centesimo = decimal [1:2]

    if centena == '1' and dezena == '1' and unidade == '1' and decimo == '1' and centesimo == '1':
    
        print("\n O numero: %s possui %s Centena %s Dezena %s Unidade vírgula %s Décimo e %s Centésimo" %(numero,centena, dezena, unidade, decimo, centesimo))

    else:
        
        print("\n O numero: %s possui %s Centenas %s Dezenas %s Unidades vírgula %s Décimos e %s Centésimos"%(numero,centena, dezena, unidade, decimo, centesimo))

elif (qtdnumero == 2 and qtddecimal == 2) or (qtdnumero == 2 and qtddecimal == 1) or qtdnumero == 2:

    dezena = numero[:1]
    unidade = numero [1:2]
    decimo = decimal [:1]
    centesimo = decimal [1:2]

    if dezena == '1' and unidade == '1' and decimo == '1' and centesimo == '1':

        print ("\n O numero: %s possui %s Dezena e %s Unidade vírgula %s Décimo e %s Centésimo"%(numero,dezena,unidade,decimo, centesimo))

    else:
        print ("\n O numero: %s possui %s Dezenas e %s Unidades vírgula %s Décimos e %s Centésimos"%(numero,dezena,unidade,decimo, centesimo))

elif (qtdnumero == 1 and qtddecimal == 2) or (qtdnumero == 1 and qtddecimal==1) or qtdnumero == 1:
        

    unidade = numero [1:2]
    decimo = decimal [:1]
    centesimo = decimal [1:2]
    
    if unidade == '1' and decimo == '1' and centesimo == '1':
        
        print ("\n O numero: %s possui %s Unidade vírgula %s Décimo e %s Centésimo"%(numero,unidade,decimo,centesimo))

    else:
        
        print ("\n O numero: %s possui %s Unidades vírgula %s Décimos e %s Centésimos"%(numero,unidade,decimo, centesimo))



Filipe Cifali

unread,
Oct 6, 2015, 2:39:41 PM10/6/15
to python...@googlegroups.com
Boa tarde Luiz,

uma dica, monte o seu output sob demanda.

Avalie as 3 variáveis e monte ele conforme os números forem exibidos, exemplo: você vai escrever centenas somente quando o primeiro dígito das centenas for maior que 1, quando for 0 você não escreverá centena, etc. 

O seu segundo if do programa é muito ineficiente pois somente avalia uma única condição: 111.11, se colocar pra rodar como 112.11 ou qualquer variação desses 5 números ele quebrará o output.

Vá fazendo com calma, mesmo que pareça uma cascata de "ifs" para fazer, avalie o primeiro dígito, segundo dígito e assim vai.

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
[ ]'s

Filipe Cifali Stangler

Ricardo Lima Mazzolli

unread,
Oct 7, 2015, 9:26:17 AM10/7/15
to Grupo Python-Brasil
Olá, Luiz.

A dica do Filipe foi válida mas existem maneiras mais fáceis de fazer isso.

Você pode simplesmente transformar o número em uma sequência de caracteres, inverter essa sequência e mostrar para o usuário dígito a dígito, na ordem unidades - dezenas - centenas.

Sei que só chegou à tomada de decisão mas avance um pouco mais. A solução está depois da cortina. :P

Espero que ajude...

Ricardo
"No xadrez, chama-se 'enrascada' quando o movimento mais correto é não se mexer." (Sr. Ninguém)

Paulo Henrique Rodrigues Pinheiro

unread,
Oct 7, 2015, 9:55:30 AM10/7/15
to python...@googlegroups.com
Salve!


Achei muito interessante sua desenvoltura com slices em strings, especialmente por você estar começando.

Mas se você resolver isso apenas com operações matemáticas, seu código vai ficar muito mais simples.

Pensa nas operações básicas, em como um número decimal pode ser escrito:

    981 = 9*(10**2) + 8*(10**1) + 1*(10**0) = 9*100 + 8*10 +1 = 900 + 80 + 1

Mais uma dica é o operador // que vai lhe ajudar a resolver o problema e passar por cima de números reais, ficando apenas com os inteiros:

$ python
Python 3.4.2 (default, Jul  9 2015, 17:24:30)
[GCC 5.1.1 20150618 (Red Hat 5.1.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 981 // 100
9
>>> 81 // 10
8
>>> 1 // 1
1

Não colei o código aqui porque já falei até demais, mas é muito mais simples que essa confusa explicação minha :)

Paulo Henrique Rodrigues Pinheiro
pa...@sysincloud.it
http://www.sysincloud.it

Em 06-10-2015 11:05, Luiz Felipe escreveu:
Olá pessoal ! 

Estou começando a programar e optei pela linguagem Python. Graças ao grande Eric Hideki e Fernando Masanori.

Bom estou iniciando este tópico para pedir um auxílio de uma questão proposta pelo site Python Brasil.

A questão é a seguinte:

Faça um Programa que leia um número inteiro menor que 1000 e imprima a quantidade de centenas, dezenas e unidades do mesmo.
  • Observando os termos no plural a colocação do "e", da vírgula entre outros. Exemplo:
  • 326 = 3 centenas, 2 dezenas e 6 unidades
  • 12 = 1 dezena e 2 unidades Testar com: 326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10, 21, 11, 1, 7 e 16
 (...)

Luiz Felipe

unread,
Oct 7, 2015, 9:55:33 AM10/7/15
to Python Brasil
Olá Filipe ! 

Grato pela ajuda cara...

Vou dar mais uma analisada e posto uma possível melhoria depois.

Abraços

Luiz Felipe

unread,
Oct 7, 2015, 3:02:05 PM10/7/15
to Python Brasil
Olá Ricardo ! 

Obrigado pela dica. ... Estou um pouco ocupado durante esses dias, mas prometo que logo vou postar uma solução mais elegante.

Eu até imagino que possa fazer de outras formas o programa, trabalhando com outras técnicas da programação, mas pelo o que eu vi nas listas subsequentes os exercicios se repetem quando entra em repetição, listas e por aí vai.


Obrigado mesmo pela força. ! 

Grande abraço

Luiz Felipe

unread,
Oct 7, 2015, 8:17:56 PM10/7/15
to Python Brasil
Olá Paulo ! 

Gostei da sua ideia da divisão..

Vou ver se imagino uma solução mais elegante para o código.

Na verdade a função split nem era para ser usada. Eu assisto as aulas de python para zumbis e achei que poderia usar para identificar quando tenho decimais.

Essa era a pedra no sapato: Como vou conseguir identificar quando o numero digitado é um inteiro com casa decimal?

Por isso fiz essa macarronada.

Eu já estudei um tempo algumas matérias de programação. Hoje eu pretendo arrumar algo na área.

Estou começando com os baby steps necessários.

Mas obrigado logo postarei o código .

abraços

Paulo Pinheiro

unread,
Oct 7, 2015, 8:55:43 PM10/7/15
to Python Brasil
Salve, Luiz!


Mas vai tranquilo. Limpando uma coisa aqui e ali, quando você menos esperar vem uma solução melhor na sua cabeça. Olha isso aqui:



Te dá a parte inteira e a parte "quebrada". 

Eu não conhecia, achei aqui (onde tem várias alternativas e as razões para não usá-las):



Abraço.

Luiz Felipe

unread,
Oct 13, 2015, 4:16:09 PM10/13/15
to Python Brasil
Galera ! Lendo bem o enunciado.

eu fiz da seguinte maneira agora.

Desculpa a demora 

# -*- coding: utf-8 -*-
'''

Faça um Programa que leia um número inteiro menor que 1000 e imprima a quantidade de centenas, dezenas e unidades do mesmo.
Observando os termos no plural a colocação do "e", da vírgula entre outros. Exemplo:
326 = 3 centenas, 2 dezenas e 6 unidades
12 = 1 dezena e 2 unidades Testar com: 326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10, 21, 11, 1, 7 e 16


'''

print ("\n\nBem vindo ao programa !!!")

numero = int(input("\n\nDigite um número inteiro menor que 1000: "))

centena = int(numero/100)
dezena = int((numero-(centena*100))/10)
unidade = int(numero - (centena*100 + dezena*10))

if centena > 1 :

    cent = 'centenas'

elif centena == 1:

    cent = 'centena'

if dezena > 1:

    dez = 'dezenas'

elif dezena == 1:
    
    dez = 'dezena'

if unidade > 1:

    uni = 'unidades'

elif unidade == 1:

    uni ='unidade'

print ("\nO número possui %d %s, %d %s e %d %s"%(centena, cent, dezena, dez, unidade, uni)).

Leandro Costa Rocha

unread,
Oct 23, 2017, 4:14:20 PM10/23/17
to Python Brasil
while True: 
  n = int(input('Informe um número: '))
  if n <= 999:
    break
  else:
    print('Informe um número menor do que 1000')
  continue
  
nc = n//100
nd = (n-(nc*100))//10
nu = (n-(nc*100)-(nd*10))

print('O número {} possui {} centenas, {} dezenas e {} unidades'.format(n, nc, nd, nu))

Marcia Alves

unread,
Apr 17, 2018, 4:48:39 PM4/17/18
to Python Brasil
n = int(input("Informe um número menor do que 1000 e maior que 0 : "))
nu = n//1%10
nd = n//10%10
nc = n//100%10
print ("unidade: ",nu )
print ("dezena : ",nd )
print ("centena: ", nc)



Em terça-feira, 6 de outubro de 2015 13:04:38 UTC-3, Luiz Felipe escreveu:

Linux - Junior Polegato

unread,
Apr 17, 2018, 5:47:22 PM4/17/18
to python...@googlegroups.com
Em 17-04-2018 02:57, Marcia Alves escreveu:
> n = int(input("Informe um número menor do que 1000 e maior que 0 : "))
> nu = n//1%10
> nd = n//10%10
> nc = n//100%10
> print ("unidade: ",nu )
> print ("dezena : ",nd )
> print ("centena: ", nc)

Olá!

        Se é  para dar a resposta, mas exemplificando várias
funcionalidades, onde o desafio seria entender cada parte, eu daria um
exemplo assim:

from __future__ import print_function  #  Python 2.7
for n in [326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10,
21, 11, 1, 7, 16]:
    print(n, '=', ''.join(list(filter(lambda p: p, ['' if x[0] == '0'
else ', ' + ' '.join(x)+('' if x[0] == '1' else 's') for x in
zip(str(n)[::-1], ('centena', 'dezena',
'unidade')[::-1])]))[::-1])[2:][::-1].replace(' ,', ' e ', 1)[::-1])

        ou tudo por extenso:

from __future__ import print_function  #  Python 2.7
e = {'1': 'uma', '2': 'duas', '3': 'três', '4': 'quatro', '5': 'cinco',
'6': 'seis', '7': 'sete', '8': 'oito', '9': 'nove'}
for n in [326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10,
21, 11, 1, 7, 16]:
    print(n, '=', ''.join(list(filter(lambda p: p, ['' if x[0] == '0'
else ', ' + ' '.join((e[x[0]], x[1]))+('' if x[0] == '1' else 's') for x
in zip(str(n)[::-1], ('centena', 'dezena',
'unidade')[::-1])]))[::-1])[2:][::-1].replace(' ,', ' e ', 1)[::-1])



--

[]'s

Junior Polegato

Reply all
Reply to author
Forward
0 new messages