2015-02-08 2 views
0

У меня есть код здесь, который преобразует ASCII в базу 64, ввод «Cat» дает мне выход Базового 64 Q База 64 2 Баз 64 является F База 64 является 0печати для вывода контура в одной строке Python 3

Как я могу сделать вывод печати на одной строке таким образом, что «Cat» даст «Base 64 is Q2F0»?

b64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/" 
number = 0 
numchar = 0 
code = 0 

user_input = input("Input") 

for char in user_input: 
    numchar = numchar + 1 
    if numchar == 1: 
     number = ord(char) 
    elif numchar > 1: 
     number = ord(char) + (number << 8) 

    if numchar == 3: 
     i=3 
     for i in (3,2,1,0): 
      code = number >> (6 * i) 

#print(int(code)) 
      print("Yout base64 is "+ b64_table[int(code)]) 

      number = number - (code << (6 * i)) 
+0

Вы можете _append_ куски результата в строку во время итерации и затем выводит готовую строку в конце. – nbro

+0

Я действительно не понимаю, почему вы не используете base64.encode. – bconstanzo

+1

@bconstanzo: Я действительно не понимаю, почему люди не могут попробовать и узнать, как работает base64, когда они учатся программировать. –

ответ

1

Собирайте символы base64 в списке первым, затем присоединиться их после того, как цикл завершен, и распечатать интро только один раз:

result = [] 
for i in (3,2,1,0): 
    code = number >> (6 * i) 
    result.append(b64_table[int(code)])) 
    number = number - (code << (6 * i)) 

result = ''.join(result) 
print("Your base64 is", result) 

Это более эффективный метод; альтернативный медленный метод должен был бы использовать конкатенацию, добавляя свои символы base64 в строку result:

result = '' 
for i in (3,2,1,0): 
    code = number >> (6 * i) 
    result += b64_table[int(code)]) 
    number = number - (code << (6 * i)) 

print("Your base64 is", result) 
Смежные вопросы