초보입니다. 파이썬 while 문을 중복으로 사용하고 싶은데 잘 안됩니다.

조회수 120회

제가 파이썬으로 하고 싶은 것은,

일정 개수의 D10 주사위를 굴려 나온 값 중에서 일정 숫자 이상의 값 만큼의 주사위 갯수만큼을 다시 굴려서 그 안에서 다시 일정 숫자 이상의 값이 나온 주사위 갯수만큼 다시 굴려서...

이 작업을 주사위 개수가 0이 나올 때까지 반복한 뒤 반복한 횟수와

주사위 갯수가 0일 경우 나온 리스트의 가장 큰 값을 구하는 것입니다.

예를 들면 최초의 주사위 개수는 10개, 일정 숫자는 9라고 한다면,

  • [1, 4, 7, 10, 3, 6, 10, 10, 3, 7] → 9 이상이 3개 나왔으므로 주사위 3개를 다시 굴려서,
  • [3, 9, 10] → 9이상이 2개 나왔으므로 주사위 2개를 다시 굴려서,
  • [1, 2] → 9이상이 0개이므로, 이 리스트에서 가장 큰 값은 2

이 과정을 파이썬으로 구현하고 싶습니다. 주사위를 굴린 횟수와, 그 값, 그리고 마지막 굴린 리스트에서 가장 큰 값을 구하고 싶습니다.

주사위를 굴려서 일정 숫자보다 높은 값이 몇 개인지 구하는 코드는 만들 수 있었습니다.

import random
def dxdice(num, cri):

    dxresult = []
    dicelist = []

    while num > 0:
        d10roll = random.randrange(1, 10)
        dicelist.append(d10roll)
        num = num - 1

    count = 0
    for critical in dicelist:
        if critical >= cri:
            count += 1

    dxresult.append(dicelist)
    dxresult.append(count)

    return dxresult

print(dxdice(10,9))

위의 코드는 무사히 돌아가는 코드입니다.

그런데 이것으로 나온 결과 값을 다시 while 문에 넣어서 돌려 보니 그냥 멈춰 버립니다.

제가 기대한 것은 다시 굴린 주사위만큼 [[처음 굴린 주사위 개수만큼의 값], 일정 숫자 이상 값, [두번째 굴린 주사위 개수만큼의 값], 일정 숫자 이상 값, ...] 이렇게 일정 숫자 이상 값이 0이 될 때까지 리스트를 출력해 줄 것이라고 생각했습니다만, 멈추네요.

아래의 코드는 돌아가지 않는 코드입니다.

import random
def dxdice(num, cri):

    dxresult = []
    dicelist = []

    while num > 0:

        while num > 0:
            d10roll = random.randrange(1, 10)
            dicelist.append(d10roll)
            num = num - 1

        count = 0
        for critical in dicelist:
            if critical >= cri:
                count += 1

        dxresult.append(dicelist)
        dxresult.append(count)

        # 다시 굴리기 위해 숫자를 입력하면 거기서 멈춰 버립니다.
        num = count

    return dxresult

print(dxdice(10,9))

뭐가 문제인지 잘 모르겠습니다. 답변 부탁드립니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    dicelist 변수가 초기화되지 않기 때문에 발생한 문제로 보입니다.

    dicelist는 안쪽 while문에서 항목이 추가되고, count값을 만들기 위해 사용된 후 다시 초기화 되지 않습니다. dicelist = []으로 초기화 하는 구문을 바깥쪽 while문 안으로 넣어주시면 정상 동작할 것 같습니다.

    • 정상 동작합니다! 감사합니다! JH 2022.8.29 00:34

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.