Вот как это сделать, используя шаблон «stack» и «stack of iterators» (кредиты Gareth Rees):
def search(d, key, default=None):
"""Return a value corresponding to the specified key in the (possibly
nested) dictionary d. If there is no item with that key, return
default.
"""
stack = [iter(d.items())]
while stack:
for k, v in stack[-1]:
if isinstance(v, dict):
stack.append(iter(v.items()))
break
elif k == key:
return v
else:
stack.pop()
return default
print(search({"B": {"A": 2}}, "A"))
будет печатать 2
.
Похоже, вы ищете целочисленное деление, а не число с плавающей точкой.
Оператор /
возвращает число с плавающей точкой в Python3. Чтобы выполнить целочисленное деление в Python3, используйте //
.
Итак, я думаю, все, что вам нужно, это
(2**83 + 1)//3
, который дает
3223802185639011132549803
вместо (2**83 + 1)/3
.
В Python2.7 оба /
и //
фактически одинаковы, если вы не сделаете что-то вроде from __future__ import division
.