SyntaxError: name 'Num1' is parameter and global
Не получается сделать переменую Num1 внутри под функции sum глобальной.
При исрользовании global или nonlocal выдаёт ошибку. Ошибка в том, что в фунции sum параметр Num1 не изменяется в глобальной фрейме. И я не знаю как это исправить.
def plus1(Num1,Num2,base):
Num_Tab = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ+-/8=~!@#№$%^&?'
New_Num = ''
Num1 = Num1[::-1]
Num2 = Num2[::-1]
a = min(len(Num1),len(Num2))
i = 0
if len(Num1) < len(Num2):
Num1, Num2 = Num2, Num1
Dif = True
else:
Dif = False
def sum(Num1, Num2):
x = Num_Tab.find(Num1[i],0,base) + Num_Tab.find(Num2[i],0,base)
if x > base:
Num1 = Num1[:i] + Num_Tab[Num_Tab.find(Num1[i+1]) + 1] + Num1[i+1:]
return Num_Tab[x-base]
else:
return Num_Tab[x]
while a:
D = sum(Num1, Num2)
a-=1
New_Num = New_Num + D
i+=1
if Dif:
while i != max(len(Num1),len(Num2)):
New_Num = Num1[i] + New_Num
i+=1
return New_Num[::-1]
>>> plus1('123','391',10)
414 Хотя должен выдать 514
Ответы (1 шт):
Никогда не называйте свои функции так же, как называются встроенные объекты или функции Python - потом сюрприз будет. Назвать свою функцию
sum- это плохая идея.Старайтесь не писать функции "с побочным эффектом". Функции должны делать по возможности всё в явном виде. Если функция меняет какой-то объект - пусть она возвращает его и вы легко можете присвоить результат работы функции в объект снаружи функции. В Python при этом, в отличие от некоторых других языков, очень легко вернуть из функции любое количество объектов. И также легко присвоить произвольное число значений в переменные одной строкой.
Так что сделайте, например, так:
def str_sum(Num1, Num2):
...
Num1 = ...
result = ...
return result, Num1
res, Num1 = str_sum(Num1, Num2)
И сразу отпадает надобность в корявом использовании global.
Думаю, этого достаточно для начала.