putchar (B sprache)
Verfasst: Donnerstag 7. Mai 2009, 01:58
Hallo
Ich versuche grad die "putchar" funktion aus der B Sprache nachzubauen.
Normalerweise werden Ascii escapes in B durch ein vorangehendes '*' deklariert.
Meine frage ist nun, wie man das am elegantesten in Python umsetzt.
Das Original aus B würde so aussehen:
Die Ausgabe wäre "hello, world\012".
Mein bisheriges Ergebnis:
Natürlich kann das in der form nie funktionieren, da 'for char in chars: [...]' ja jedes zeichen *einzeln* durchläuft.
Wie splitte ich den string nun also in zweier gruppen? Oder gibt es bessere methoden das zu lösen?
PS: falls es jemand interessiert warum ich mir das antue: just 4 fun! (kein scherz, ich mach das wirklich nur zum spass. Und um nebenbei ein wenig Python zu lernen. )
Ich versuche grad die "putchar" funktion aus der B Sprache nachzubauen.
Normalerweise werden Ascii escapes in B durch ein vorangehendes '*' deklariert.
Meine frage ist nun, wie man das am elegantesten in Python umsetzt.
Das Original aus B würde so aussehen:
Code: Alles auswählen
main( ) {
putchar('hell');
putchar('o, w');
putchar('orld');
putchar('*n' );
}
Mein bisheriges Ergebnis:
Code: Alles auswählen
import sys
def putchar(chars, out=sys.stdout, enc='utf-8'):
special_chars = {'*n': '\012',
'*t': '\011',
'*r': '\015',
'*b': '\010',
'*a': '\007',
'*f': '\014',
'*0': '\000'}
nchars = ''
for char in chars: # kann natuerlich niemals funktionieren
spc = special_chars.get(str(char))
if spc:
char.replace(char, spc)
nchars += char
out.write(unicode(nchars, enc))
# beispiel aufruf:
putchar('hell')
putchar('o, w')
putchar('orld')
putchar('*n' ) # das '*n' sollte eigentlich durch \012 ersetzt werden
Wie splitte ich den string nun also in zweier gruppen? Oder gibt es bessere methoden das zu lösen?
PS: falls es jemand interessiert warum ich mir das antue: just 4 fun! (kein scherz, ich mach das wirklich nur zum spass. Und um nebenbei ein wenig Python zu lernen. )