파이썬 문자랜덤
조회수 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 입장에서 소스를 읽어봅시다.
- 파이썬.exe 는 이 소스를 1행부터 읽는데, 2행까지는 그냥 "음...
one()
이라는 함수가 있군..." 하고 지나갑니다. - 그 다음 3행을 살펴보겠지요. 근데
candidate
리스트의0
번째 원소 값을 알려면one()
을 실행해야 하는 거 같군요. 그래서 이 시점에서one()
이 실행됩니다. - 그
one()
의 동작으로서print()
가 실행되어, "망고"가 출력됩니다. - 하지만 정작
one()
이 반환하는 값은 없죠. 그래서candidate
의0
번 원소는None
이 됩니다. - 오케이..
0
번 원소 확보했고1
번 원소는"사과"
로군... - 그리고 여기서 파이썬이 일을 마칩니다. 모든 행을 읽어서 처리했기 때문에.
"망고는 계속 첫번째로 뜨"는 것처럼 보이는 건 그 때문입니다.
원하시는 것은
return
문일 것입니다. 어떤 함수/메소드가K
를return
하도록 되어 있을 경우, 그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
- 파이썬.exe 는 이 소스를 1행부터 읽는데, 2행까지는 그냥 "음...
댓글 입력