Convert

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

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

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
Antworten