Найти - Пользователи
Полная версия: Почему теряется return хотя принт работает
Начало » Python для новичков » Почему теряется return хотя принт работает
1
pyhappy
def isprime(n):
for x in range(2, int(n**0.5)+1):
if n % x == 0:
return False
return True

def checkio(nbr):

nbr=str(nbr)
centr=len(nbr)//2
if len(nbr)%2:
a,b,c=int(nbr[0:centr]),int(nbr[centr]),int(nbr[len(nbr):centr:-1])
if c>=a:
b=b+1
if b==10:
b=str()
a=str(a+1)
else:
a=str(a)
c=str(str(a)[::-1])
else:
a=str(a)
b=str(b)
c=str(str(a)[::-1])

result = int(a+b+c)

else:
d,e=int(nbr[0:centr]),int(nbr[len(nbr):centr-1:-1])
if e>=d:
d=str(d+1)
if not int(d)%10:
x=d[0:len(d)-1]
else: x=d
e=str(str(x)[::-1])

else:
d=str(d)
e=str(str(d)[::-1])

result = int(d+e)
## t
if not isprime(result):

checkio(result)
else:
print(result)
return result


print(checkio(44))
почему print(result) выдает правильный результат - 101, а return возвращает 55, тот который был до выполнения функции isprime

вот исходное задание http://www.checkio.org/mission/info/prime-palindromes-/
sp3
Так рекурсия же у вас, return возвращает не из всех функций а только из текущей. Понаставляйте побольше принтов, что бы понять как же ваш код работает, либо можно вызвать исключение и отловить его на самом верху…
bw
Может так?..
def checkio(nbr):
# ...
if not isprime(result):
result = checkio(result)
print(result)
return result
..bw
pyhappy
sp3
Я дебугером проверил перед самым завершение переменная result имеет правильно значение 101, но в итоге выдает None. Вы имеете ввиду что return нельзя пользоваться при рекурсиях - “return возвращает не из всех функций а только из текущей.”

bw
так не прошло
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB