# -*- coding: iso8859-1 -*- # Das war die erste Lösung, die mir eingefallen ist # und ich war damit sofort auf dem richtigen Weg... def seven_seg1(input): data = ( ' _ ',' ',' _ ',' _ ',' ',' _ ',' _ ',' _ ',' _ ',' _ ', '| |',' |',' _|',' _|','|_|','|_ ','|_ ',' |','|_|','|_|', '|_|',' |','|_ ',' _|',' |',' _|','|_|',' |','|_|',' _|') return '\n'.join([''.join([data[int(c)+j*10] for c in input]) for j in range(3)]) # Jetzt galt es zu optimieren. Die nächste Version ist nur ein Zwischenschritt # um auf die korrekten Array Indices für die übernächste Version zu kommen: def seven_seg2(input): return '\n'.join([''.join([('010010000034556774666475456465')[int(c)+j*10] for c in input]) for j in range(3)]) \ .replace('0', ' _ ').replace('1',' ').replace('3','| |').replace('4',' |')\ .replace('5',' _|').replace('6','|_|').replace('7','|_ ') # Jetzt sieht die Sache schon ziemlich kurz aus und die folgenden Versionen # brachten nur jeweils einen Gewinn von ein paar Zeichen... def seven_seg3(input): ascii = (' _ ',' ','| |',' |',' _|','|_|','|_ ') return '\n'.join([''.join([ ascii[int(('010010000023445663555364345354')[int(c)+j*10])] for c in input]) for j in range(3)]) def seven_seg4(i):return '\n'.join([''.join([' _ + +| |+ |+ _|+|_|+|_ '.split('+')[int('010010000023445663555364345354'[int(c)+j*10])] for c in i]) for j in 0,1,2]) def seven_seg5(i):return '\n'.join([''.join([' _ | | | _||_||_ '[int('010010000023445663555364345354'[int(c)+j*10])*3:][:3] for c in i]) for j in 0,1,2]) # an dieser Stelle half mir ein Kommentar eines anderen Teilnehmers in der # Newsgroup weiter, der meinte er hätte drei "magic numbers" und so bin ich # schliesslich auf meinen Beitrag zum Wettbewerb gekommen, den ich dann # eigesendet habe... def seven_seg6(i):x=''.join;return x([x([' _ | | | _||_||_ '[int(str(m)[int(c)])*3:][:3]for c in i])+'\n'for m in 1011011111,2344566355,5364345354]) # Und das funktioniert tatsächlich! Mein Trick waren zwei ineinander verschachtelte "list comprehensions" # bzw. zum Schluss eine "generator expression" um noch ein paar Bytes zu sparen. print seven_seg6("123456789")