2016-04-11 12 views
2

eine Nummer number, so dass ihre Ziffern in Teile der Länge gruppiert sind n (Standardwert von n 3), wobei jede Gruppe eine ascii Wert darstellt, möchte ich number konvertieren in eine Reihe dieser ASCII-Zeichen. Zum Beispiel:konvertieren eine ganze Zahl in einen String seiner ASCII-Werte

n    number  Output 
================================== 
3     70   F 
3   65066066065  ABBA 
4  65006600660065  ABBA 

Hinweis, dass es keine führenden 0 in Zahl ist, so dass der erste ascii Wert wird nicht unbedingt mit n Ziffern dargestellt werden.

Meine aktuellen Code sieht wie folgt aus:

def number_to_string(number, n=3): 
    number = str(number) 
    segment = [] 

    while number: 
     segment.append(number[:n]) 
     number = number[n:] 

    return str(''.join('{:0>{}}'.format(chr(segment), n) for segment in number)) 

Erwartete Ergebnisse:

number_to_string(70) 
'F' 

number_to_string(65066066065) 
'ABBA' 

number_to_string(65006600660065, n=4) 
'ABBA' 

Meine aktuellen Code jedoch einen leeren String zurück. Zum Beispiel gibt es anstelle von 'F' ' ' zurück. Irgendein Grund, warum das ist? Vielen Dank!


P.S .:
Ich wollte ich den Prozess der this question umzukehren, das heißt wiederum eine ganze Zahl in eine Zeichenfolge basierend auf den ASCII-Werte für jedes Zeichen (Zahl) in der Zeichenkette. Aber diese Frage zu lesen, ist keine Voraussetzung, um diese Frage zu beantworten.

+0

Es ist einfacher für den Rest von uns, wenn Sie eine in sich geschlossene Frage stellen. Wir sollten nicht eine andere Frage/Antwort/Kommentar-Set lesen müssen, um dieses zu verstehen. – tom10

+0

Entschuldigung. :( –

+0

Ihr Loop-Zustand ist 'while number:'. Das bedeutet, dass die Schleife weiter läuft, während 'number' noch etwas übrig hat und stoppt, wenn' number' leer ist. Wenn Sie also zum 'return kommen 'statement,' number' ist leer und lässt nichts übrig für den 'format'-Aufruf, daher wird ein leerer String zurückgegeben (ich gehe davon aus, dass' für Segment in num 'ein Tippfehler ist und eigentlich' für Segment 'sein sollte in Zahl ".) –

Antwort

1

Diese Versuchen:

import re 

def number_to_string(num, n=3): 
    num_str = str(num) 
    if len(num_str) < n: 
     num_str = '0' * (n-len(num_str)) + num_str 
    elif len(num_str) % n != 0: 
     num_str = '0'*(n-len(num_str)%n) + num_str 
    print(num_str) 

    chars = re.findall('.'*n, num_str) 
    l = [chr(int(i)) for i in chars] 
    return ''.join(l) 

erstes Pad die gegebene Zahl (in Zeichenfolge konvertiert) mit der erforderlichen Anzahl von Nullen, so dass es gleichmäßig in jeweils gleiche Anzahl von Zeichen aufgeteilt werden kann. Dann teilen Sie die Zeichenfolge mit re in Segmente der Größe n. Konvertieren Sie schließlich jeden Chunk in Zeichen mit chr, und verbinden Sie sie dann unter Verwendung join.

+0

Dies beantwortet nicht die Frage, OP wollte wissen, warum sein bestehender Code nicht funktioniert. –

+0

Dies funktioniert für die Eingabe von 70, aber für die anderen Eingaben gibt es eine seltsame Kombination zurück, zum Beispiel für '65066066065' gibt es '' \ x06 '' zurück. –

+0

@IndifferentPotato Versuchen Sie den bearbeiteten Code. Ich habe einen kleinen Fehler gemacht. –

0
def numToStr(inp): 
"""Take a number and make a sequence of bytes in a string""" 
out="" 
while inp!=0: 
    out=chr(inp & 255)+out 
    inp=inp>>8 
print "num2string:", out 
return out 

hilft das?

+0

Dies funktioniert für die erste Beispieleingabe, aber für die andere gibt es eine lustige Ausgabe zurück. ZB für 65066066065 gibt es '\ x91' –

-1

Sie können einfach anhängen \ x Anzahl wie dieses 'p' druckt:

print '\x70' 
0

Ist das, was Sie wollen?

def num_to_string(num, leng): 
    string = "" 
    for i in range(0,len(str(num)),leng): 
     n = str(num)[i:i+2] 
     string += chr(int(n)) 
    print string 

Ausgang:

>>> ================================ RESTART ================================ 
>>> 
>>> num_to_string(650065006600,4) 
AAB 
>>> num_to_string(650650660,3) 
AAB 
>>> num_to_string(656566,2) 
AAB 
>>> 
+0

zurück Für diesen Eingang 660066schlägt Ihr Code fehl. Um genau zu sein, wird es für Ascii-Codes mit 3 Ziffern fehlschlagen. –

+0

@ Snađошƒаӽ Sind die Ziffern für ASCII-Codes für Buchstaben in einer Zeichenfolge festgelegt? – Abraham

Verwandte Themen