2013-09-21 2 views
1

저는 파이썬에서 초보자입니다. 명확한 루프, 문자열 누산기 및 연결을 사용하여 노래를 출력해야하는 과제가 있습니다. 문제는 필자가 명확한 루프에서 각 절을 인쇄 할 수 있다는 것입니다 (이 노래는 3 절이 3 곡으로 가정 됨). 그리고 각 절이 작성되기 전에 사용자에게 동물을 입력하라는 메시지가 표시됩니다. 소리 (그것의 오래된 맥도날드). 나는 사용자가 입력 한 후에 각 절이 인쇄되도록하는 과제의 첫 번째 부분을 완료하는 것을 달성했지만 두 번째 부분은 전체 전체에 연 (3 개)이 모두 연결되도록 요구합니다. 따라서 최종 결과는 하나의 노래에 함께 배치 된 개별 스탠자입니다. 문제는 노래를 업데이트하고 마지막에 전체 노래를 출력해야하는 경우 누산기를 어떻게 사용합니까? 첨부 내 코드입니다 (이것은 파이썬 2.7.5 참고)초심자 파이썬 : 누산기 루프 함수

def main(): 


    for stanza in range(3): 
     animal = raw_input("What animal? ") 
     animalSound = raw_input("What sound does a %s make? " %(animal)) 

     print 
     print "\t Old MacDonald had a farm, E-I-E-I-O," 
     print "And on his farm he had a %s, E-I-E-I-O" %(animal) 
     print "With a %s-%s here - " %(animalSound, animalSound) 
     print "And a %s-%s there - " %(animalSound, animalSound) 
     print "Here a %s there a %s" %(animalSound, animalSound) 
     print "Everywhere a %s-%s" %(animalSound, animalSound) 
     print "Old MacDonald had a farm, E-I-E-I-O" 
     print 

답변

2

"어큐뮬레이터"으로 이전 패턴에 계속 추가하는 패턴이라고 가정합니다. 이것은 교환 원 +=과 함께 할 수 있습니다.

"concatenation"으로, 나는 문자열 연산자 +을 의미한다고 가정합니다.

고객님의 규칙에 따라 % 운영자는 허용되지 않습니다.

song = '' # Accumulators need to start empty 
for _ in range(3): # Don't really need the stanza variable 
    animal = raw_input("What animal? ") 
    animalSound = raw_input("What sound does a %s make? " %(animal)) 

    song += "Old MacDonald had an errno. EIEIO\n" 
    song += "His farm had a " + animal + " EIEIO\n" 
    song += "His " + animal + "made a noise: " + animalSound + "\n" 
print song 

나는이 과제가 부르는이라고 생각하지만, 이것은 간주되지 않을 것이다 실현 "좋은"또는 "파이썬"

당신은 이런 식으로 할 수 있습니다 암호. 특히, 문자열 누적 은 비효율적입니다. 목록 내포를 선호하고 str.join()을 선호합니다.

0

대신에 각 행을 인쇄, 목록에 각 행을 넣어. 예를 들어 :

lyrics = ['\t Old MacDonald had a farm, E-I-E-I-O,', "And on his farm he had a %s, E-I-E-I-O" % animal, etc] 

그런 다음, 당신이 그것을 인쇄 할 때, 지금처럼 str.join() 방법을 사용하십시오

print '\n'.join(lyrics) 

이 새로운 라인 ('\n')로 구분 된 목록의 각 항목을 인쇄합니다.

가사 목록으로 이제 에 추가 할 수 있습니다. 각 목록에는 각 절이 있습니다. 루프의 외부, 어쩌면 같은 것을 넣어 : 루프 내부

stanzas = [] 

다음은 수행

stanzas.append(lyrics) 

는 말에, 그래서 다른 목록 stanzas에 목록 lyrics 추가 루프의 경우 stanzas에 세 개의 목록이 있습니다. 다시 한 번, 목록의 각 항목을 인쇄하려면 str.join()을 사용하십시오.

+0

입력 해 주셔서 감사 드리며 작동하지만 나는 초보자이므로이 단계를 배웠지 않아 코드에서 사용할 수 없습니다. 그냥 연결, 누적 기 및 확실한 루프를 사용하는 대체 방법이 있습니까? –

+0

@ user2792907 죄송합니다. 고객님을 도와 드릴 수 없습니다. – TerryA