편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2022.08.28

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


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

    일정 개수의 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))
    

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

  • 프로필 remiz0114@gmail.com님의 편집
    날짜2022.08.28

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


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

    일정 개수의 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))
    

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