Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2011 21:22:16

pyhappy
От: Moscow/Russia
Зарегистрирован: 2011-11-13
Сообщения: 22
Репутация: +  0  -
Профиль  

Почему теряется return хотя принт работает

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-/

Офлайн

#2 Дек. 14, 2011 22:43:55

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Почему теряется return хотя принт работает

Так рекурсия же у вас, return возвращает не из всех функций а только из текущей. Понаставляйте побольше принтов, что бы понять как же ваш код работает, либо можно вызвать исключение и отловить его на самом верху…



Офлайн

#3 Дек. 15, 2011 03:48:17

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Почему теряется return хотя принт работает

Может так?..

def checkio(nbr):
# ...
if not isprime(result):
result = checkio(result)
print(result)
return result
..bw



Отредактировано (Дек. 15, 2011 03:49:20)

Офлайн

#4 Дек. 15, 2011 14:08:31

pyhappy
От: Moscow/Russia
Зарегистрирован: 2011-11-13
Сообщения: 22
Репутация: +  0  -
Профиль  

Почему теряется return хотя принт работает

sp3
Я дебугером проверил перед самым завершение переменная result имеет правильно значение 101, но в итоге выдает None. Вы имеете ввиду что return нельзя пользоваться при рекурсиях - “return возвращает не из всех функций а только из текущей.”

bw
так не прошло

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version