Python-функция ord (), которая возвращает длину - PullRequest
0 голосов
/ 20 апреля 2019

В настоящее время я пишу программу, в которой мне нужно преобразовать текстовый файл из ascii в целое число и после выполнения некоторых операций преобразовать обратно. Однако проблема в том, что ord () может возвращать любое число от 1 до 3 цифр, и было бы очень хорошо, если бы он мог вернуть стандартное количество цифр. Так как мои программы в настоящее время

def convert_message_number2ascii(mystring):
    newstring = ""
    print("number:")
    for i in range(0,len(mystring),2):
        print("mystring[i:i+2]:"+mystring[i:i+2])
        newstring = newstring + str(chr(int(mystring[i:i+2])))
        print(newstring)
    return newstring


def convert_message_ascii2number(mystring):
    newstring = ""
    print("ascii:")
    for i in range(0,len(mystring)):
        newstring = newstring + str(ord(mystring[i]))
        print(newstring)
return newstring

Но это не работает, потому что, как я сказал, ord возвращает целые числа различных размеров, есть ли другая функция, которая возвращает 000 для ord (\ 0) вместо 0? если нет, то как лучше всего это сделать, потому что я могу думать только о «безобразных» способах.

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Похоже, вы просто хотите взять число с 3 или менее цифрами и отформатировать это число всегда с 3 цифрами, с префиксом с нулями. Например, отформатируйте 5 как 005 и 50 как 050.

Вы можете сделать это с помощью метода str.format.

Например:

number = 5
"{:03}".format(number) # note: the 3 means use 3 digits

возвращает

"005"

В контексте:

for i in range(0,len(mystring)):
    char_code = ord(mystring[i])
    formatted_char_code = "{:03}".format(char_code)
    newstring = newstring + str(formatted_char_code)
    print(newstring)

Но если вы можете, возможно, рассмотрите возможность хранения всех этих кодов символов в списке вместо одной большой строки.

1 голос
/ 20 апреля 2019

Для этого можно использовать форматирование строки:

def convert_message_ascii2number(mystring):
    newstring = ""
    print("ascii:")
    for i in range(0,len(mystring)):
        newstring = newstring + "%03d" % ord(mystring[i])
        print(newstring)
    return newstring
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...