Convert

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Convert

Beitragvon name » Donnerstag 19. Oktober 2006, 14:05

Hab mich auch mal wieder aufgerappelt was zu coden, und da is das rausgekommen :)

Code: Alles auswählen

import string
import sys
class Convert:
   def __init__(self,number,fromsystem,system):
      self.system = system
      self.fromsystem = fromsystem
      self.number = number
      self.system2dez()
      self.dez2system()
      #print self.number
   def __repr__(self):
      return self.number
   def system2dez(self):
      liste = self.chars2int()
      i = 0
      erg = 0
      while(i < len(liste)):
         erg += liste[i]*self.fromsystem**(len(liste)-1-i)
         i+=1
      #print erg
      self.number = erg
   def chars2int(self):
      liste = list(self.number)
      #print liste
      i = 0
      retlist = []
      letters = string.ascii_letters[26:]
      while(i < len(liste)):
         if(liste[i] in letters):
            retlist.append(self.searchstelle(liste[i]))
         else:
            retlist.append(int(liste[i]))
         i+=1
      return retlist
   def searchstelle(self,letter):
      i = 0
      letters = string.ascii_letters[26:]
      while(i < len(letters)):
         if(letters[i] == letter):
            return i+10;
         i+=1
   def chars(self,liste):
      letters = string.ascii_letters[26:]
      i = 0
      while(i < len(liste)):
         if(liste[i] >= 10):
            liste[i] = letters[liste[i]-10]
         i+=1
      return liste
   def zahl2str(self,array):
      i = 0
      while(i < len(array)):
         array[i] = str(array[i])
         i+=1
      return array
   def dez2system(self):
      erg = int(self.number)
      binary = []
      while(1):
         if(erg / self.system == 0):
            binary.append(erg % self.system)
            erg = (erg - erg % self.system) / self.system
            binary = self.chars(binary)
            binary = self.zahl2str(binary)
            binary.reverse()
            #print binary
            "".join(binary)
            break   
         binary.append(erg % self.system)
         erg = (erg - erg % self.system) / self.system
      self.number = "".join(binary)
if __name__ == "__main__":
   argv = sys.argv[1:]
   if("-h" in argv or "--help" in argv or len(argv) != 3):
      print "python convert.py [ZAHL] [AUSGANGSSYSTEM] [AUSGABESYSTEM]"
      print "-h -- print this help"
      sys.exit(1)
   a = argv[0].upper()
   b = int(argv[1])
   c = int(argv[2])
   instance = Convert(a,b,c)
   print instance.number
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
BlackJack

Beitragvon BlackJack » Donnerstag 19. Oktober 2006, 14:48

Reichlich umständlich. Eine Zeichenkette die eine Zahldarstellung mit beliebiger Basis von 2 bis 36 enthält kann man mit der `int()` Funktion in ein `int` wandeln. Die Basis einfach als zweites Argument übergeben. Und `int` in Basis geht auch einfacher. Siehe z.B. hier:

http://www.python-forum.de/topic-4524.html

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder