More actions
imported>Unknown No edit summary |
(Repair batch-0003 pages from live compare) |
||
| Line 7: | Line 7: | ||
reverseStr = '' | reverseStr = '' | ||
for i in range(len(numberStr)): | for i in range(len(numberStr)): | ||
reverseStr += numberStr | reverseStr += numberStr[len(numberStr) - i - 1] | ||
return int(reverseStr) | return int(reverseStr) | ||
| Line 13: | Line 13: | ||
numberStr = str(number) | numberStr = str(number) | ||
for i in range(len(numberStr)): | for i in range(len(numberStr)): | ||
if(numberStr | if(numberStr[i] != numberStr[len(numberStr) - i - 1]): | ||
return False | return False | ||
return True | return True | ||
| Line 52: | Line 52: | ||
result = raa.reverseAndAdd(int(input())) | result = raa.reverseAndAdd(int(input())) | ||
if(result != None): | if(result != None): | ||
print str(result | print str(result[0]) + ' ' + str(result[1]) | ||
---- | ---- | ||
그리 맘에 들지는 않는다. --재동 | 그리 맘에 들지는 않는다. --재동 | ||
| Line 59: | Line 59: | ||
>>> n=4321 | >>> n=4321 | ||
>>> int(str(n) | >>> int(str(n)[::-1]) #python 2.3이상 | ||
1234 | 1234 | ||
>>> int(''.join(reversed(str(d)))) #python 2.4이상 | >>> int(''.join(reversed(str(d)))) #python 2.4이상 | ||
| Line 68: | Line 68: | ||
위 코드를 이용하면... | 위 코드를 이용하면... | ||
>>> def rev(d): return int(str(d) | >>> def rev(d): return int(str(d)[::-1]) | ||
>>> def revAndAdd(d): | >>> def revAndAdd(d): | ||
| Line 87: | Line 87: | ||
마치 ''pseudo code''를 보는 것 같네요. --재동 | 마치 ''pseudo code''를 보는 것 같네요. --재동 | ||
Revision as of 00:29, 27 March 2026
ReverseAndAdd/신재동
import unittest
class ReverseAndAdder:
def reverse(self, number):
numberStr = str(number)
reverseStr =
for i in range(len(numberStr)):
reverseStr += numberStr[len(numberStr) - i - 1]
return int(reverseStr)
def isPalindrome(self, number):
numberStr = str(number)
for i in range(len(numberStr)):
if(numberStr[i] != numberStr[len(numberStr) - i - 1]):
return False
return True
def reverseAndAdd(self, number):
count = 0
for i in range(1000):
number = number + self.reverse(number)
count += 1
if(self.isPalindrome(number)):
break
else:
print 'No reverse and add'
return None
return (count, number)
class ReverseAndAdderTestCase(unittest.TestCase):
def testReverse(self):
raa = ReverseAndAdder()
self.assertEquals(1234, raa.reverse(4321))
self.assertEquals(12321, raa.reverse(12321))
def testIsPalindrome(self):
raa = ReverseAndAdder()
self.assertEquals(False, raa.isPalindrome(4321))
self.assertEquals(True, raa.isPalindrome(12321))
self.assertEquals(True, raa.isPalindrome(1221))
def testReverseAndAdd(self):
raa = ReverseAndAdder()
self.assertEquals((4, 9339), raa.reverseAndAdd(195))
self.assertEquals((5, 45254), raa.reverseAndAdd(265))
self.assertEquals((3, 6666), raa.reverseAndAdd(750))
if __name__ == '__main__':
#unittest.main()
raa = ReverseAndAdder()
result = raa.reverseAndAdd(int(input()))
if(result != None):
print str(result[0]) + ' ' + str(result[1])
그리 맘에 들지는 않는다. --재동
reverse 메소드 대신에 다음과 같이 간단히 할 수 있다:
>>> n=4321 >>> int(str(n)[::-1]) #python 2.3이상 1234 >>> int(.join(reversed(str(d)))) #python 2.4이상 1234
파이썬에서 for 루프를 먼저 생각하는 것은 사고의 단위가 작은 것이고, 이것은 영문독해를 할 때 한번에 한단어씩 보는 것과 구문을 한번에 보는 것의 차이와 비교할 수도 있다.
위 코드를 이용하면...
>>> def rev(d): return int(str(d)[::-1]) >>> def revAndAdd(d): c=0 while True: rd=rev(d) if d==rd:break d+=rd c+=1 return c,d >>> revAndAdd(195) (4, 9339)
all tests data will be computable with less than 1000 iterations (additions)를 고려한다면 명시적인 회수 체크는 없어도 될 듯.
--JuNe
마치 pseudo code를 보는 것 같네요. --재동