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

Sign in to follow this  
DooM4chin3

Uma pequena ajuda..

Recommended Posts

DooM4chin3

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()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.