힌트
퀴즈를 푸는 데 필요한 random 모듈의 shuffle() 함수와 sample() 함수의 사용법을 잠시 설명하겠습니다.
컴퓨터나 스마트폰 등으로 음악을 들을 때 어떻게 하나요? 재생목록에 듣고 싶은 음악을 추가하고 처음부터 순서대로 듣나요? 아니면 무작위로 섞어서 듣나요? 저는 주로 셔플 + 전체 반복 옵션을 이용합니다. 그러면 재생목록에 있는 노래가 순서 없이 무작위로 흘러나오고, 재생목록의 노래가 모두 재생되면 또 다시 무작위로 노래가 재생됩니다.
shuffle() 함수는 이와 비슷합니다. shuffle이라는 단어 뜻 그대로 섞는 역할을 하는 함수입니다. shuffle() 함수는 리스트의 데이터를 무작위로 섞어 줍니다. 단, 리스트에서 값만 뽑아 섞는 게 아니라 리스트 자체에서 값을 섞기 때문에 shuffle() 함수를 사용하고 나면 데이터 순서가 달라질 수 있다는 점을 주의해야 합니다.
sample() 함수는 리스트에서 원하는 개수만큼 중복 없이 값을 뽑는 동작을 수행합니다. 3.4.3 random 모듈에서 로또 번호를 뽑는 예제를 살펴본 적이 있습니다. 번호를 뽑는 각각의 동작은 독립 사건이라서 아쉽게도 중복 번호는 처리하지 않았습니다. 중복 번호를 처리하려면 앞에서 뽑은 번호를 어딘가 저장해 두었다가 번호를 뽑을 때마다 비교해서 새로운 번호가 나올 때까지 뽑는 작업을 반복해야 합니다. 그런데 sample() 함수를 사용하면 이런 번거로움 없이도 중복 없이 한 번에 원하는 개수만큼 번호를 뽑을 수 있습니다.