• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

DooM4chin3

Uma pequena ajuda..

1 mensagem neste tópico

Boas, para começar confesso k n sou um grande entendedor de python...

Tenho k fazer um programa k transforma os numeros em palavras..

Objectivo: 999,999,999 euros e 99 centimos

Fiz dois programas diferentes mas n consigo meto-los a funcionar a 100% e n sei inserir a parte dos euros e centimos...  :wallbash:

def int2word(n):

    n3 = []
    r1 = ""
    # create numeric string
    ns = str(n)
    for k in range(3, 33, 3):
        r = ns[-k:]
        q = len(ns) - k
        # break if end of ns has been reached
        if q < -2:
            break
        else:
            if  q >= 0:
                n3.append(int(r[:3]))
            elif q >= -1:
                n3.append(int(r[:2]))
            elif q >= -2:
                n3.append(int(r[:1]))
        r1 = r
    
    nw = ""
    for i, x in enumerate(n3):
        b1 = x % 10
        b2 = (x % 100)//10
        b3 = (x % 1000)//100
        #print b1, b2, b3  # test
        if x == 0:
            continue  # skip
        else:
            t = thousands[i]
        if b2 == 0:
            nw = ones[b1] + t + nw
        elif b2 == 1:
            nw = tens[b1] + t + nw
        elif b2 > 1:
            nw = twenties[b2] + ones[b1] + t + nw
        if b3 > 0:
            nw = ones[b3]+ "cento " + "e " + nw
if n ==100:
	print "cem"
    return nw

############# globals ################

ones = ["", "um ","dois ","tres ","quatro ", "cinco ",
    "seis ","sete ","oito ","nove "]

tens = ["dez ","onze ","doze ","treze ", "catorze ",
    "quinze ","dezasseis ","dezasete ","dezoito ","dezanove "]

twenties = ["","","vinte ","trinta ","quarenta ",
    "cinquenta ","sessenta ","setenta ","oitenta ","noventa "]

thousands = ["","mil ","milhao ", "biliao ", "triliao ",
    "quadriliao ", "quintiliao ", "sextiliao ", "septiliao ","octiliao ",
    "noniliao ", "deciliao ", "undeciliao ", "duodeciliao ", "tredeciliao ",
    "quatuordeciliao ", "sexdeciliao ", "septendeciliao ", "octodeciliao ",
    "novemdeciliao ", "vigintiliao "]

if __name__ == '__main__':

    n = input('Insira um numero: ')
    
    print n
        
    print "-"*50
    print int2word(n)
    print "-"*50

______________________



import wx

class NumberFormat:
      NUMEROS = {0:'zero',
                 1:'um',
                 2:'dois',
                 3:'tres',
                 4:'quatro',
                 5:'cinco',
                 6:'seis',
                 7:'sete',
                 8:'oito',
                 9:'nove',
                 10:'dez',
                 11:'onze',
                 12:'doze',
                 13:'treze',
                 14:'quatorze',
                 15:'quinze',
                 16:'dezesseis',
                 17:'dezesete',
                 18:'dezoito',
                 19:'dezenove',
                 20:'vinte',
                 30:'trinta',
                 40:'quarenta',
                 50:'cinquenta',
                 60:'sessenta',
                 70:'setenta',
                 80:'oitenta',
                 90:'noventa',
                 100:"cento",
                 200:"duzentos",
                 300:"trezentos",
                 400:"quatrocentos",
                 500:"quinhentos",
                 600:"seiscentos",
                 700:"setecentos",
                 800:"oitocentos",
                 900:"novecentos"}

      def __format_(self, number):
          resultado = ''
          if number == '':
             resultado = ''
          elif number in NumberFormat.NUMEROS.keys():
             resultado = NumberFormat.NUMEROS[ number ]
             return resultado
          else:
             primeiro_character = int(str(number)[0]) * (10 ** (len(str(number)) - 1) )
             resto = str(number)[1:len(str(number))]
             resto = str(self.__format_( int(resto) ))
             resultado = self.__format_( primeiro_character )
             if resto != '':
                resultado += " e " + resto
          return resultado

      def format(self,numero):

          return self.__format_(int(numero))
    
class Frame (wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition)
        self.CreateStatusBar()
        self.SetStatusText('Em espera.')
        sizer = wx.FlexGridSizer(rows=9, cols=2, hgap=10, vgap=5)
        for x in range(0,4):
            sizer.Add((10,10), 0, wx.EXPAND)
        sizer.Add(wx.StaticText(self,-1, "Numero"))
        self.numero=wx.TextCtrl(self,1, "")
        sizer.Add(self.numero)
        sizer.Add(wx.StaticText(self,-1, "Texto"))
        self.texto=wx.TextCtrl(self,-1, "",size=(200,30),style=wx.TE_READONLY|wx.EXPAND)
        sizer.Add(self.texto)

        
        for x in range(0,4):
            sizer.Add((10,10), 0, wx.EXPAND)
        sizer.Add(wx.Button(self, 100, "Obter Texto"))
        sizer.Add(wx.Button(self, 200, "Terminar"))
        sizer.Add((10,10),0,wx.EXPAND)
        
        sizer.AddGrowableRow(6)
        sizer.AddGrowableCol(6)
        self.Bind(wx.EVT_BUTTON, self.Obter, id=100)
        self.Bind(wx.EVT_BUTTON, self.Terminar, id=200)
        self.numero.Bind(wx.EVT_TEXT, self.VerificarNumeros,id=1)
        self.SetSizerAndFit(sizer)
        self.Centre()
        
    def Obter(self,evt):
        self.texto.SetValue(NumberFormat().format(self.numero.GetValue()))
    def VerificarNumeros(self,evt):
        valor =''
        contarponto = 0
        valorinicial= self.numero.GetLineText(0)
        for i in valorinicial:
            if i in ['1','2','3','4','5','6','7','8','9','0']:
                valor = valor + i
            elif i == '.' and contarponto!= 1:
                valor= valor +i
                contarponto= 1
        self.numero.SetValue(valor)
        self.SepararString()
        
    def SepararString(self):
        string= self.numero.GetValue()
        self.numerais= ''
        self.decimais =''
        for i in string:
            if i!='.':
                self.numerais=self.numerais+i
            else:
                t=len(self.numerais)+1
                self.decimais= string [t:]
                break
        self.SepararNumeral()
        
    def SepararNumeral(self):
        inversa= len(self.numerais)-1
        contagem=1
        numeral=self.numerais
        for i in self.numerais:
            contagem= contagem+1
            inversa=inversa-1
            if contagem ==3:
                contagem=0
                numeral= numeral[:inversa]+'.'+numeral[inversa:]
        if self.decimais=='':
            print numeral+' Euros'
        else:
            print numeral+','+self.decimais,'Euros'
            
    def Terminar (self, evt):
        self.Close()


application = wx.App()
frame = Frame(None, wx.ID_ANY,"Rllz Prog")
frame.Show()
application.MainLoop()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora