2016-06-04 4 views
3

저는이 작업을 한동안 진행해 왔으며, 영어 텍스트를 스웨덴어로 번역 한 함수를 작성하는 작업을 수행하고 있습니다. 나는 keys가 & 값을 가진 dicitonary를 만들었고, key는 영어 단어이고 value는 스웨덴어 단어입니다.파이썬 함수가 빈 목록을 반환합니다.

나는 어떻게 생각 하나 : 나는 2 개의 루프가 있어야한다고 생각했다. 첫 번째는 사전의 키와 값을 반복해야하고, 두 번째 것은 문자열을 반복해야하며, 그 다음에 사전의 키가 문자열의 단어와 같은지 확인하는 조건이 있어야합니다. 그렇다면 키 값을 목록에 추가하십시오.

문제 : 이 함수는 빈 목록을 반환합니다. 나는 이것이 당신이 찾고 있던 무슨 생각

def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
    translated = [] 
    for k, v in trs.iteritems(): 
     for i in a.split(" "): 
      if trs[k] == i: 
       translated.append(trs[v]) 
    return translated 

print translate("merry christmas and happy new year") 
+2

루프에서는'trs'의 키로'k'를, 값으로'v'를 이미 가지고 있습니다. 'trs [k]'와'trs [v]'와 같이 키로'trs'를 다시 넣는 이유는 무엇입니까? –

+0

"사전에있는 키가 문자열에있는 단어와 같으면"잘 모르겠다. ** 값 ** 인'trs [k]'와 비교하면'if i == k'를 체크 할 필요가있다. 열쇠와 대조 해봐. –

+0

무슨 뜻입니까? trs 사전의 키가 문자열 (i)의 단어와 같으면 '번역 된'목록에 ​​값을 추가하고 싶습니다. –

답변

4

. if trs[k] == i: 여기 translated.append(trs[v])이 그냥 kv 대신 trs[k]trs[v]이어야합니다 :

첫 번째

는 사전에 키 - 값 쌍을 반복하고, 나중에 여기에 키와 값을 사용하려고한다는 것입니다.

두 번째 문제는 더 큰 문제입니다. 이전 문제를 수정 한 후에도 코드는 여전히 잘못된 대답을 제공합니다. 단어의 순서는 무작위입니다. 이것은 단어 자체가 아닌 외부 루프의 사전 항목을 반복하기 때문입니다. 이것은 루프의 순서를 변경하여 쉽게 수정할 수 있습니다.

세 번째는 함수가 문자열을 반환해야한다고 생각합니다. 마지막에 " ".join(translated)을 반환하십시오.

네 번째는 실제로 사전을 사전으로 사용하지 않는다는 것입니다. 목록으로 사용하지만 사용 방법은 아닙니다. dict은 값의 직접 매핑이므로 항상 모든 항목을 반복 할 필요가 없습니다. in[] 연산자를 사용하십시오.

def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ar"} 
    translated = [] 
    for i in a.split(" "): 
     if i in trs: 
     translated.append(trs[i]) 
    return " ".join(translated) 

print translate("merry christmas and happy new year") 
# prints "god jul och gott nytt ar" 
당신은 원래의 단어 이상 반복 알고리즘을 구동해야한다는 것을 의미 번역에서 단어의 순서를 유지하려면
+0

설명해 주시고 제가 잘못한 것을 알려 주셔서 감사합니다. D 새로운 것을 배웠습니다. 다시 한 번 감사드립니다. –

2

:

은 여기 내 코드 'S 코드 여러 문제가 있습니다

trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
translated = [] 
for i in a.split(" "): # loop over sentence and try to translate every word 
    if i in trs: # the word to be translated is a key in your dict 
     translated.append(trs[i]) # add the translation if present 
    # else 
    # translated.append(i) 
return ' '.join(translated) # makes more sense than returning a list 
+0

흠? 왜 정확히 물어볼 거니? – schwobaseggl

+0

코드가 잘못 되었기 때문에 –

+0

시도 했습니까? – schwobaseggl

1
def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ar"} 
    translated = [] 
    for i in a.split(" "): 
     for k, v in trs.iteritems(): 
      if i == k: 
       translated.append(trs[i]) 
    return translated 

print translate("merry christmas and happy new year") 

# output: 
# ['god', 'jul', 'och', 'gott', 'nytt', 'ar'] 
3
  • (이상 반복하지 : 그래서 여기

    이 코드가 같이하는 방법입니다 귀하의 번역 사전).

  • 사전을 반복 할 필요가 없습니다. 키 - 값 데이터 구조의 목적은 개별 항목을 키별로 빠르게 검색 할 수있게하는 것입니다.

  • 사전에는 get() 메서드가 있습니다.이 메서드는 키가있을 수도 있고 없을 수도 있습니다.

  • 그냥 추측하지만 메서드는 번역 된 단어 목록보다는 텍스트를 반환해야합니다 (그에 따라 조정).

  • 는 그래서 모든이 아래로 비등 :

    return ' '.join(trs.get(w, w) for w in orig_text.split()) 
    
0
def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
    translated = [] 
    for i in a.split(" "): 
     for k, v in trs.iteritems(): 
      if k == i: 
       translated.append(trs[k]) 
return translated 
6 호선에서

print translate("merry christmas and happy new year)

, 당신은 TRS에게 [K] TRS에서 값을 반환 wwill [K를하고있다 ]는 부분 문자열과 동일하지 않습니다. 그래서 빈 목록이 나옵니다.

관련 문제