2014-09-02 2 views
0

프로그래밍 초보자입니다. 제 코드에 어떤 문제가 있는지 알려주시겠습니까? 숫자는 숫자가 회문인지 확인하기 위해다음 Palindrome 번호

n = int(input("Enter any number :- ")) 

reverse = 0 
temp = n 

while (n!=0): 
    reverse = reverse * 10 
    reverse = reverse + n%10 
    n=n//10 
if(temp==reverse): 
    print ("Already palindrome:: ") 

if(temp != reverse): 
    new_temp = temp 
    new_reverse = 0 
    for i in range(new_temp,new_temp+10): 
     while(temp != 0): 
      new_reverse = new_reverse * 10 
      new_reverse = new_reverse + temp%10 
      temp = temp//10 
     if(new_temp==new_reverse): 
      print ("Next pallindrome is :- ",new_temp) 
      break 
     if(new_temp != new_reverse): 
      temp = new_temp+1 
+0

당신이 그것을 어떻게 입력을 제공하고 있으며, 예상 출력과 실제 출력은 무엇인가? –

+0

'n'이 210이라고합시다. 따라서 다음 회문은 212가되어야하지만 출력은 none입니다. –

+0

들여 쓰기는 어떨까요? 그것을 컴파일하는 동안 또는 그냥 여기 있습니까? – Nabin

답변

2

.

1) "for i in range"루프는 임시 변수의 역수를 계산하지만 임시 변수의 값은 변경하지 않습니다. 당신은 그래서 당신은 하나의 동일한 값으로 10 번 반복하는거야

new_temp = temp 
for i in range(new_temp,new_temp+10): 
    [SNIP] 
    if(new_temp != new_reverse): 
     temp = new_temp+1 #this value never changes. 

을한다.

2) 회 돌이를 찾는 데 10 번의 반복이 충분하지 않을 수 있습니다. 당신이 회문을 찾을 때까지 계속가.

근무 코드 :

def reverse(num): 
    reverse= 0 
    while num: 
     reverse= reverse*10 + num%10 
     num= num//10 
    return reverse 

num= int(input("Enter any number :- ")) 
if num==reverse(num): 
    print ("Already palindrome.") 
else: 
    while True: 
     num+= 1 
     if num==reverse(num): 
      print ("Next palindrome is : %s"%num) 
      break 
3

을 회문하지 않습니다 (n)은 사용자가 입력 한 경우

내가 다음 회문 번호를 인쇄하려면, 당신은으로 변환 할 필요가 없습니다 번호. 사실, 숫자에 해당하는 문자열을 확인하는 것이 훨씬 간단합니다.

>>> i = '212' 
>>> i == i[::-1] 
True 
>>> i = '210' 
>>> i == i[::-1] 
False 

당신의 이점에 사용이, 그리고 함수 작성 : 단순히 회문 검사까지 수를 증가의 다음 회문을 찾기 위해,

def is_palindrome(foo): 
    return str(foo) == str(foo)[::-1] 

다음을 사실이다.

모든 것을 결합하고 당신은 :

여기
def is_palindrome(n): 
    return str(n) == str(n)[::-1] 

n = raw_input('Enter a number: ') 
if is_palindrome(n): 
    print('Congratulations! {0} is a palindrome.'.format(n)) 
else: 
    n1 = n 
    while not is_palindrome(n1): 
     n1 = int(n1)+1 
    print('You entered {0}, but the next palindrome is {1}'.format(n, n1)) 

그것이 작동하는 방법이다 : 코드 두 가지 문제가 있습니다

$ python t.py 
Enter a number: 123 
You entered 123, but the next palindrome is 131 
$ python t.py 
Enter a number: 121 
Congratulations! 121 is a palindrome. 
+0

날짜까지 가장 똑똑한 대답 좀 봐주세요! :-) –

2

도움이된다면, 나는 그것이 N 입력 번호의 길이 N/2 반복하여이 문제를 해결하는 것이 가능하다 생각합니다. 명확한 범위가 주어진다면

def next_palin_number(number): 
    # Convert the number to a list of its digits. 
    number = list(str(number)) 
    # Initialize two indices for comparing symmetric digits. 
    i = 0 
    j = len(number) - 1 
    while i < j: 
     # If the digits are different: 
     if number[i] != number[j]: 
      # If the lower-power digit is greater than the higher-power digit: 
      if int(number[j]) > int(number[i]): 
       number[j - 1] = str(int(number[j - 1]) + 1) 
       number[j] = number[i] 
      else: 
       number[j] = number[i] 
     i += 1 
     j -= 1 
    # Concatenate and return the result. 
    return "".join(number) 
+0

니스. 그러나 그들을 비교하기 위해 숫자를'int'로 변환 할 필요는 없습니다. –

+0

사실 당신은 그렇지 못하지만, 나는 사실을 좋아한다. 이것은 사전 편집 순서가 숫자에 대한 int 비교와 동일한 순서를 제공한다는 사실에 의존하기보다는 명시 적으로 포인트를 만든다. 내 보닛에 '<' or '>'문자열에 대한 벌이 있습니다. :) 그러나 변환을 버리는 것은 *** 일 수 있습니다 ... –

0

: 여기 파이썬에서 내 솔루션입니다 - 숫자 15까지 다음 번호로 범위를 올리는 회문

def palin(x):     
    s=str(x) 
    if s==s[::-1]: 
     return True 
    else: 
     return False 

n=int(input("Enter the number")) 

경우

funcion 확인하기 숫자

for i in range(n+1,int(10e14)): 
    if palin(i) is True: 
     print(i) 
     break 
0

이 문제는 여러 가지 방법으로 해결할 수 있습니다. 그 중

하나는 시간이 내 대답을 읽을 수

def nearest_palindrome(number): 
    #start writitng your code here 
    while True: 
     number+=1 
     if str(number) == str(number)[::-1]: 
      return number 

number=12300 
print(nearest_palindrome(number)) 

감사입니다 :)