초보입니다. 파이썬 while 문을 중복으로 사용하고 싶은데 잘 안됩니다.
조회수 424회
제가 파이썬으로 하고 싶은 것은,
일정 개수의 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 답변
-
dicelist
변수가 초기화되지 않기 때문에 발생한 문제로 보입니다.dicelist
는 안쪽 while문에서 항목이 추가되고, count값을 만들기 위해 사용된 후 다시 초기화 되지 않습니다.dicelist = []
으로 초기화 하는 구문을 바깥쪽 while문 안으로 넣어주시면 정상 동작할 것 같습니다.
댓글 입력