파이썬 문자랜덤

조회수 978회
import random

def one():

    print("망고")

candidate = [ one(), '사과' ]

for _ in range(3):

  choice = random.choice(candidate)

  print(choice)

이렇게 작성을 하였는데

망고

사과 

NULL

또는

망고

NULL

NULL

망고는 계속 첫번째로 뜨고 NULL이 뜨는데 이유가 뭔지 궁금합니다 !!

문자를 랜덤으로 할려니깐 이유가 먼지 모르겠습니다. 가르쳐주시면 감사하겠습니다.

1 답변

  • 이 코드를 '실행'시켜 보시면, 난데없이 "망고"가 출력되고, 그 이후 아무 일도 안 일어납니다.

    def one():
        print("망고")
    candidate = [one(), '사과']
    

    어떻게 그렇게 될까요? 여기서부터는 파이썬.exe 입장에서 소스를 읽어봅시다.

    1. 파이썬.exe 는 이 소스를 1행부터 읽는데, 2행까지는 그냥 "음... one()이라는 함수가 있군..." 하고 지나갑니다.
    2. 그 다음 3행을 살펴보겠지요. 근데 candidate 리스트의 0번째 원소 값을 알려면 one()을 실행해야 하는 거 같군요. 그래서 이 시점에서 one()이 실행됩니다.
    3. one()의 동작으로서 print()가 실행되어, "망고"가 출력됩니다.
    4. 하지만 정작 one()이 반환하는 값은 없죠. 그래서 candidate0번 원소는 None이 됩니다.
    5. 오케이.. 0번 원소 확보했고 1번 원소는 "사과"로군...
    6. 그리고 여기서 파이썬이 일을 마칩니다. 모든 행을 읽어서 처리했기 때문에.

    "망고는 계속 첫번째로 뜨"는 것처럼 보이는 건 그 때문입니다.


    원하시는 것은 return문일 것입니다. 어떤 함수/메소드가 Kreturn하도록 되어 있을 경우, 그 K는 그 함수가 호출될 때 비로소 연산되어 유일한 반환값으로서 반환됩니다. 그래서 그 반환값을 변수의 값으로 할당하거나, 어떤 배열의 원소로 집어넣거나, print()하거나 할 때 편리하지요.

    다음 코드가 기대한 대로 작동하는지, 질문자님의 코드와 결정적으로 다른 점이 무엇인지 잘 살펴보세요.

    import random
    
    def one():
        return "망고"
    
    candidate = [one(), '사과']
    for _ in range(3):
        choice = random.choice(candidate)
        print(choice)
    
    • 가르쳐주셔서 감사합니다!! 덕분에 이해가 되었습니다!! def안에 while문과 if문을 코딩을 하였습니다. 서로 다른 두 개의 def안에 코딩한 것을 전체 나오게하여 def 전체를 랜덤 반복하는 방법이 있을까여?? 3시간 째 계속 고민하고 시도를 해보았는데 도저히 찾기가 어렸습니다.. 예시) def one(): 과 def two(): 있으면 이 두개의 def를 전체 랜덤 반복하는 법을 알고 싶습니다!! def안에 while문, if문이 있습니다! HelloWorld 2020.6.14 22:48
    • 그건 좀 새로운 얘기 같네요. 별도의 새 질문으로 올려 주시면 다른 분들이 봐주실지도 모릅니다. 엽토군 2020.6.15 15:44
    • 넵!! 감사합니다!! HelloWorld 2020.6.16 17:40

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)