2014-11-11 4 views
0

저는 현재 작업하고있는 문제가 있습니다. 문제의 목표는 문자열 자리 표시 자 i을 가져 오는 것입니다. i이 균등 한 자리 표시자인 경우 i에있는 문자를 i -1에있는 문자로 바꿉니다. i 자리 표시자가 홀수 인 경우 i 문자를 i +1 문자로 바꿉니다.문자열의 다른 자리 표시 자에서 str.replace를 사용하여 문자열의 다른 자리 표시 자로 바꿉니다.

여기에 지금까지 내 코드입니다 :

def easyCrypto (s): 
    for i in range (0,len(s)-1): 
     if i % 2 == 0: 
      str(s).replace(i,((i-1))) 
     if i % 2 != 0: 
      str(s).replace(i,((i+2))) 
    print (s) 

내 오류 :

Traceback (most recent call last): 
    File "<pyshell#4>", line 1, in <module> 
    easyCrypto('abc') 
    File "C:/Python/cjakobhomework7.py", line 4, in easyCrypto 
    str(s).replace(i,((i-1))) 
TypeError: Can't convert 'int' object to str implicitly 

갱신!

Traceback (most recent call last): 
    File "<pyshell#7>", line 1, in <module> 
    easyCrypto('abc') 
    File "C:/Python/cjakobhomework7.py", line 4, in easyCrypto 
    s = str(s).replace(s(i),(s(i-1))) 
TypeError: 'str' object is not callable 

어떤 아이디어 :

def easyCrypto (s): 
    for i in range (0,len(s)-1): 
     if i % 2 == 0: 
      s = str(s).replace(s(i),(s(i-1))) 
     else: 
      s = s.replace(s(i), s(i + 1)) 
    print (s) 

그러나 나는 아직도 다음과 같은 오류가 있습니다 : 응답에 따라

새로운 코드? 당신에게 감사

여기에 두 가지가 있습니다
+1

문제는'i'는 _integer_이고'str.replace'는 인수가 _strings_이 될 것으로 예상한다는 것입니다. – mgilson

답변

0

:

  1. str.replace가 자동으로 인수를 캐릭터 라인 화하지 않는가. 수동으로 문자열로 변환해야합니다. "Explicit은 암묵적인 것보다 낫다."

  2. str.replace 문자열이 파이썬에서 불변이므로 내부에서 작동하지 않습니다. str.replace에 의해 반환 된 새 문자열 개체에 s을 다시 할당해야합니다.

코드는해야한다 : 또한

s = s.replace(str(i), str(i-1)) 

, 첫 번째가 false 인 경우에만 사실이 될 수있는 두 번째 경우 문의 조건 때문에 else:if i % 2 != 0:을 대체 할 수

if i % 2 == 0: 
    s = s.replace(str(i), str(i-1)) 
else: 
    s = s.replace(str(i), str(i+1)) 

편집 한 질문에 대해서는문자열을 호출하려고합니다. 그 뒤에 괄호를 배치하여 함수로. 엄지의 일반적인 규칙으로

s = s.replace(s[i], s[i-1]) 

(...) 대괄호 [...]가있는 동안 함수를 호출위한 괄호 : 그것은 것입니다 귀하의 경우에는

>>> 'abcde'[0] 
'a' 
>>> 'abcde'[3] 
'd' 
>>> 

: 당신은 인덱스에 문자열을 대괄호를 사용해야합니다 인덱싱 시퀀스/컨테이너 용.

+0

@pts 내가 추천하는 내용에 확신이 없음 –

+1

@ChristopherJakob - 새 질문을 반영하도록 답변을 업데이트했습니다. 앞으로도 새로운 문제를 귀하의 질문에 편집해서는 안됩니다. 이렇게하면 사람들이 혼란스럽게 할뿐 아니라 응답도 무효화됩니다. 대신 새로운 문제에 관해 새로운 질문을하는 것이 가장 좋습니다. – iCodez

+0

@pts oh ok 이런 일을 할 수있는 적절한 방법을 알려 주셔서 감사합니다. =) –

2

s(i) 대신 s[i]을 사용하고 다른 인덱스도 마찬가지입니다.

+0

()와 [] 괄호를 올바르게 사용했는지 알려주십시오.() 인덱스를 사용하지만 인덱스의 위치에 문자를 요구하기 때문에이 경우 []를 사용합니다. 옳은? –

+1

's'가 하나의 인수를 취하는 함수이고'i' 인자로 호출하고자한다면's (i)'를 사용하십시오. 's'가 문자열이고'i' 문자가 필요한 경우's [i]'를 사용하십시오. 's [i]'문법은 (비공식적으로) 인덱싱이라고 불리며, 인덱스는 'i'입니다. – pts

관련 문제