Добавьте номера в шестнадцатеричном базе без конвертации баз? -- python поле с участием hex пол Связанный проблема

Add numbers in hexadecimal base without converting bases?


2
vote

проблема

русский

Мне нужно написать функцию, которая получает два числа в шестнадцатеричном базе, и вычисляет сумму обоих из них, мне не разрешено преобразовывать их в десятичную базу, код должен рассчитывать его «вручную» с использованием петлей Отказ Например, это то, как он должен работать:

 <код>  1  1 f 5  (A)  +  5 a  (B)  -------------  = 2 4 f    

Вот пример ввода: <Код> >>> add("a5", "17") 'BC'

Я начал строить свой код, но я застрял, я подумал, что буду разделить на три, если бы подвести только количество номеров, другие суммы и буквы, а также третий суммы буквы, но я не знать, как продолжить здесь:

 <код> def add_hex(A,B): lstA = [int(l) for l in str(A)] lstB = [int(l) for l in str(B)]  if len(A)>len(B):     A=B     B=A A='0'*(len(B)-len(A))+A remainder=False result='' for i in range(len(B)-1) if (A[i]>0 and A[i]<10) and (B[i]>0 and B[i]<10):    A[i]+B[i]=result    if A[i]+B[i]>10:        result+='1'   

Любая помощь значительно ценится, я понятия не имею, как начать на это!

Английский оригинал

I need to write a function which gets two numbers in hexadecimal base, and calculates the sum of both of them, I'm not allowed to convert them to decimal base, the code is supposed to calculate it "manually" using loops. for example this is how it should work:

 1  1 f 5  (A)  +  5 a  (B)  -------------  = 2 4 f  

Here is an input example: >>> add("a5", "17") 'bc'

I've started building my code but I got stuck, I thought I would divide into three ifs, one that would sum up only numbers, other sums numbers and letters, and the third one sums letters, but I don't know how to continue from here:

def add_hex(A,B): lstA = [int(l) for l in str(A)] lstB = [int(l) for l in str(B)]  if len(A)>len(B):     A=B     B=A A='0'*(len(B)-len(A))+A remainder=False result='' for i in range(len(B)-1) if (A[i]>0 and A[i]<10) and (B[i]>0 and B[i]<10):    A[i]+B[i]=result    if A[i]+B[i]>10:        result+='1' 

Any help is greatly appreciated, I have no clue how to start on this!

</div
     
         
         

Список ответов

1
 
vote

Вы можете иметь подфункцию, которая добавляет два однозначных шестнадцатеричных номера и возвращает их однозначную сумму и носить (либо 0, либо 1). Эта функция займет три входа: два номера, которые вы хотите добавить и перенос. Затем вы можете зацикливаться через цифры двух чисел, которые вы хотите добавить от наименее значимых для наиболее значимых, и примените эту функцию для каждой пары цифр, принимая во внимание перенос на каждом этапе.

Так что давайте попробуем свой пример:

. 5. 1 7 + 

Мы начинаем с наименее значимых цифр, 5 и 7 и выполните 1-значное дополнение. 5 16 + 7 16 = 12 10 . 12 10 меньше 16 10 , поэтому вывод нашего 1-значного добавления 12 10 = c 16 С носителем 0.

Теперь мы добавляем A и 1 (наш перенос 0, поэтому мы можем просто добавить их нормально). 16 + 1 16 = 11 10 . 11 10 меньше 16 10 , поэтому вывод нашего 1-значного добавления 11 10 = b 16 С носителем 0,0 (если у нас был ненулевой перенос, мы просто добавили 1 к этому значению.)

Следовательно, наш общий результат:

. 5. 1 7 + ------ ДО Н.Э 
 

You can have a sub-function that adds two single-digit hex numbers and returns their single-digit sum and a carry (either 0 or 1). This function will take three inputs: two numbers you want to add and a carry-in. You can then loop through the digits of the two numbers you want to add from least significant to most significant, and apply this function for every pair of digits while taking into account the carry at each stage.

So let's try your example:

 A 5 1 7 + 

We start at the least significant digits, 5 and 7, and perform the 1-digit addition. 516 + 716 = 1210. 1210 is less than 1610, so the output of our 1-digit add is 1210 = C16 with a carry of 0.

Now we add A and 1 (our carry-in is 0 so we can just add them normally). A16 + 116 = 1110. 1110 is less than 1610, so the output of our 1-digit add is 1110 = B16 with a carry of 0. (If we had a non-zero carry-in, we would just add 1 to this value.)

Hence, our overall result is:

 A 5 1 7 + ----- B C 
</div
 
 
0
 
vote

Я думаю, что мы просто помним образец дополнения. Как следующий.

 <код> "0" + "0" = "0" "0" + "1" = "1" "0" + "2" = "2"        .        .        . "f" + "d" = "1b" "f" + "e" = "1c" "f" + "f" = "1e"   

У нас есть <код> dictionary of all of the pattern потому что мы узнали его в школе или где-то. И мы также узнали <код> carry .

Так что я думаю, что это похоже на алгоритм ручного добавления.

  1. Вспоминая шаблон включает в себя перенос.
  2. расчет
      .
    • Перевести две цифры в одну цифру (A + B- & GT; C).
    • Относитесь правильно.

А вот мой код для этого. Но это может быть немного сложно.

 <код> import itertools  def add_hex(A,B):     A = "0"+A     B = "0"+B     #Remember all pattern include carry in variable d.     i2h = dict(zip(range(16), "0123456789abcdef"))     a = [(i,j) for i in "0123456789abcdef" for j in "0123456789abcdef"]     b = list(map(lambda t: int(t[0],16)+int(t[1],16), a))     c = ["0"+i2h[i] if i<16 else "1"+i2h[i-16] for i in b]#list of digit include carry     d = dict(zip(a,c))#d={(digit,digit):digit,,,}     #Calculate with variable d.     result = ""     cur = "0"     nex = "0"     for i in itertools.izip_longest(A[::-1], B[::-1], fillvalue = "0"):         cur = d[(nex, d[i][1])][1]                   #cur = carry + digit + digit         if d[i][0]=='1' or d[(nex, d[i][1])][0]=='1':#nex = carry = carry + digit + digit             nex = "1"         else:             nex = "0"         result += cur      return result[::-1]  #Test A = "fedcba" B = "012346" print add_hex(A,B)     print hex(int(A,16)+int(B,16))#For validation   

Я надеюсь, что это поможет. :)

 

I think we just remember the pattern of addition. Like following.

"0" + "0" = "0" "0" + "1" = "1" "0" + "2" = "2"        .        .        . "f" + "d" = "1b" "f" + "e" = "1c" "f" + "f" = "1e" 

We have dictionary of all of the pattern because we've learned it in school or somewhere. And we've also learned carry.

So I think this seems like manual addition algorithm.

  1. Remembering the pattern include carry.
  2. Calculating
    • Translate two digit to one digit(a+b->c).
    • Treat carry correctly.

And here is my code for that. But it may be a bit tricky.

import itertools  def add_hex(A,B):     A = "0"+A     B = "0"+B     #Remember all pattern include carry in variable d.     i2h = dict(zip(range(16), "0123456789abcdef"))     a = [(i,j) for i in "0123456789abcdef" for j in "0123456789abcdef"]     b = list(map(lambda t: int(t[0],16)+int(t[1],16), a))     c = ["0"+i2h[i] if i<16 else "1"+i2h[i-16] for i in b]#list of digit include carry     d = dict(zip(a,c))#d={(digit,digit):digit,,,}     #Calculate with variable d.     result = ""     cur = "0"     nex = "0"     for i in itertools.izip_longest(A[::-1], B[::-1], fillvalue = "0"):         cur = d[(nex, d[i][1])][1]                   #cur = carry + digit + digit         if d[i][0]=='1' or d[(nex, d[i][1])][0]=='1':#nex = carry = carry + digit + digit             nex = "1"         else:             nex = "0"         result += cur      return result[::-1]  #Test A = "fedcba" B = "012346" print add_hex(A,B)     print hex(int(A,16)+int(B,16))#For validation 

I hope it helps. :)

</div
 
 

Связанный проблема

0  Запрос доступа от класса Inherit (View)  ( Access request from inherit class view ) 
Как я могу предъявить запрос на var, если я не реализую методы Get / Post из класса Inherit (View)? <код> class Base(View): def __init__(self): ...

0  Jupyter Lab / Ubuntu / «Нет модуля по имени BCLZ»  ( Jupyter lab ubuntu no module named bcolz ) 
Bcolz был успешно установлен и может работать в Python3 (попробовал в терминале). Однако, когда я попробовал это в Jupyter Lab (или ноутбук), приходит ошибка:...

2  подмодул .POPEN отказывается запускать команду, хотя OS.System работает нормально  ( Submodules popen refuses to run a command even though os system works fine ) 
Всякий раз, когда я запускаю этот скрипт: <код> gcalctool0 Я постоянно получаю эту ошибку: <код> gcalctool1 Тем не менее, <код> gcalctool2 определе...

1  Где многопроцессор  ( Where is multiprocessing process ) 
Я портирую рабочее приложение из Python 3.3-34 и столкнулся с странной ситуацией. Класс Multipressing.Process отсутствует в загрузке с Python.org. Вместо этог...

0  Объедините несколько столов для ответа JSON в Django Read Framework  ( Combine multiple tables for a json response in django rest framework ) 
Я использую Django Read Framework для моего serializers . Мне нужно создать веб-сервис, который сочетает в себе поля в трех таблицах и дает JSON. У меня ес...

1  Как мне позвонить в родительский класс в подклассе?  ( How do i call on a parent class in a subclass ) 
Мне нужно создать вызов несвязанного метода, чтобы установить имя и листья, и я не знаю, как. Любая помощь ценится. Мой код: <код> class Plant(object): ...

51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала  ( Pythons requests missing dependencies for socks support when using socks5 fro ) 
Я пытаюсь взаимодействовать с API из My Python 2.7 Shell, используя пакет, который опирается на запросы Python. Вещь - это удаленный адрес блокируется моей се...

1  Нахождение корней с Scipy.Optimize.root  ( Finding roots with scipy optimize root ) 
Я пытаюсь найти root y функции, называемой f с помощью python. Вот мой код: <код> def f(y): w,p1,p2,p3,p4,p5,p6,p7 = y[:8] t1 = w - 0.500371726*...

-4  Как суммировать значения при заворачивании аналогичного ключа, чтобы построить Dict  ( How to sum values when zipping similar key to build a dict ) 
У меня есть <код> A = [a, b, c, d, a, d, c] и <код> B=[1, 2, 3, 4, 5, 6, 7] Почему <код> dict(zip(A,B)) не возвращается <код> {'a': 6, 'b': 2, 'c': 10, '...

0  После добавления клеток найдите мин и максимум пяти различных категорий в файле CSV  ( After appending cells find min and max of five different categories in a csv fi ) 
Привет всем У меня есть вопрос. Я просто сейчас изучаю мин и макс. У меня проблемы в нахождении мин и максимум пяти столбцов для каждой категории Вот, что...

5  Как я могу получить Mercurial для того, чтобы снова выдвигать коммиты?  ( How can i get mercurial to push commits again ) 
Я не знаю, что я ничего изменил и работаю Ubuntu 10.10. Mercurial работает нормально, а затем внезапно, когда я начал толкать сегодня утром, я начал получать ...

0  Почему этот сценарий Python работает на Ubuntu, но не распачин?  ( Why does this python script work on ubuntu but not raspbian ) 
Друг, и я создал следующий скрипт, использующий BeautifulSoup, чтобы получить HTML страницы работы, а затем добавить работу на массив, затем файл, затем отпра...

0  Python / django - Начало Apache с mod_wsgi  ( Python django starting apache with mod wsgi ) 
пытается запустить mod_wsgi. Получение опорной ошибки связанной с FMOD. <код> [root@host]# mod_wsgi-express start-server wsgi.py --port=80 > --user www...

0  Как бы я избавился от определенных персонажей, а затем выпустите очищенную струну в Python?  ( How would i get rid of certain characters then output a cleaned up string in pyt ) 
В этом фрассетере кода я пытаюсь получить ссылки на изображения, размещенные в группеЧанчатке определенным пользователем: <код> import groupy from groupy im...

0  NameError: Имя «Домашние животные» не определены. Питон  ( Nameerror name pets is not defined python ) 
Это код, который я использую, но каждый раз, когда я пытаюсь запустить его, я получаю эту ошибку в терминале: <код> Traceback (most recent call last): Fil...

Связанный проблема

0  Запрос доступа от класса Inherit (View) 
0  Jupyter Lab / Ubuntu / «Нет модуля по имени BCLZ» 
2  подмодул .POPEN отказывается запускать команду, хотя OS.System работает нормально 
1  Где многопроцессор 
0  Объедините несколько столов для ответа JSON в Django Read Framework 
1  Как мне позвонить в родительский класс в подклассе? 
51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала 
1  Нахождение корней с Scipy.Optimize.root 
-4  Как суммировать значения при заворачивании аналогичного ключа, чтобы построить Dict 
0  После добавления клеток найдите мин и максимум пяти различных категорий в файле CSV 
5  Как я могу получить Mercurial для того, чтобы снова выдвигать коммиты? 
0  Почему этот сценарий Python работает на Ubuntu, но не распачин? 
0  Python / django - Начало Apache с mod_wsgi 
0  Как бы я избавился от определенных персонажей, а затем выпустите очищенную струну в Python? 
0  NameError: Имя «Домашние животные» не определены. Питон