2017-04-30 1 views
0

문자열이 파이썬으로 쓰여 있는지 확인하는 코드가 있습니다.파이썬을 사용하여 palindrome 문자열을 찾을 수 없습니다.

s=input() 
for i,j in reversed(s),range(0,len(s)): 
    if (i == s[j]): 
     continue 
    else: 
     break 
if (j == len(s)-1): 
    print('Yes') 
else: 
    print('No') 

변수 's'를 역순으로 탐색하고 원래 변수와 동일한 지 확인합니다. 맞으면 루프가 계속됩니다. 그렇지 않으면 종료합니다. 결국 루프 변수 'i'의 값을 확인합니다. 문자열의 길이와 같으면 's'는 회문 (palindrome)이라고 결론을 내립니다. 그렇지 않으면 그렇지 않습니다.

for i,j in reversed(s),range(0,len(s)): 
ValueError: too many values to unpack (expected 2) 

내가 잘못 이해하지 않는 - 은 그러나, 나는 두 번째 줄에 오류가 발생합니다!

+0

일부 예제 문자열 제공 – RomanPerekhrest

답변

0

두 개의 반복 가능 코드를 함께 압축해야합니다. 이것은 또 다른 솔루션입니다

for i,j in zip(reversed(s),range(0,len(s))): 
0
# use enumerate 
for j,i in enumerate(reversed(s)): 
    if (i == s[j]): 
     continue 
    else: 
     break 
if (j == len(s)-1): 
    print('Yes') 
else: 
    print('No') 

보십시오 : 여기

#s[::-1] reverses the string 
print('Yes') if s==s[::-1] else print('No') 
2

솔루션에 대한 가장 컴팩트 한 형태이다. 간단히 시킴으로 빨리와 문자열과 일치 역

is_palindrome = lambda s: str(s) == str(s)[::-1] 

>>> is_palindrome('abcba') 
>>> True 
0

당신이 얻고있는 이유를 설명하지 않습니다하지만 Zohab의 대답은, 당신이해야 할 바라고 무엇을 달성 할 것입니다 방법입니다 때문에 ValueError를 (그리고 그 아마 미래에 다시 그걸 실행하게 될 것입니다.)

역순 반복 가능 "s"을 길이에 따라 원거리 반복 가능하도록 정렬하는 것으로 나타납니다.

for reference in [reversed("Hello World"),range(0,len("Hello World"))]: 
    ## First Iteration 
    reference = "dlroW olleH" 
    i = reference[0] ## "d" 
    j = reference[1] ## "l" 
    ValueError ## We don't have a variable to assign reference[2]/"r" to 
: 그것은 기본적으로 다음과 같이 실행됩니다에 "Hello World"의 입력과,

for reference in [reversed(s),range(0,len(s))]: 
    (i,j) = reference 

그래서 : 파이썬 인터프리터는 같은 코드를 (대략) 읽기 때문에 작성된-이 실패하는 이유는

분명히, 이것은 당신이 원하는 것이 아닙니다.

TimGJ가 말한 것처럼 zip() 함수를 사용하면 반전 된 문자를 범위 번호 (0, len (s)의 숫자와 쌍을 이루는 새 개체를 만듭니다.)). 그 결과는 다음과 같습니다.

for i,j in (("d",0),("l",1),etc...): 
    ## First iteration 
    i = "d" 
    j = 0 

원하는 결과가 있습니다. 그러나 Allen이 지적했듯이이 범위로 압축하는 것은 enumerate() 함수로 이미 다룹니다.

또한 분명히 설명하기 위해 범위 (n)는 범위 (0, n)와 같습니다.

관련 문제