테스트 사이트 - 개발 중인 베타 버전입니다

파이썬 난수 생성 함수 0 포함 하는 함수 만들기

하숴소 3년 전 조회 2,939

 

여기까지 난수 생성하는 함수를 만들었습니다. (최소값, 최대값, 난수 생성 개수 지정)

이 함수를 import 해와서 함수를 하나 더 만든 후 랜덤 신호를 생성할 때.

0이 있다면 출력하고 신호를 return하고 0이 없다면 다시 랜덤한 신호를 생성하는 함수를 만드는데

저 주석 처리한 부분이 왜 잘못됐는지 잘 모르겠습니다.

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

3년 전

지역변수 array 를 못찾는것 같습니다.

</p>

<p>#    if find_zero(array) == 0:</p>

<p>

바로 아래라인 while find_zero(array) 도 마찬가지 이겠구요.

 

</p>

<p>if __name__ == "__name__":</p>

<p>

이 부분도

</p>

<p>if __name__ == "__main__":</p>

<p>

처럼 되어야 하지 않나 싶구요

 

파이썬 잘은 모르지만 재구성 해봤습니다.

다만 의도하시는 내용이 정확히 맞는지는 모르겠습니다.

 

+ 구성요소

</p>

<p>./

├── generate_random_signal.py

└── main.py</p>

<p>

 

+ generate_random_signal.py

</p>

<p>from random import randint</p>

<p>def generate_random_signal(min_val, max_val, length):

    arr = []

    x = 0</p>

<p>    while (x < length):

        for i in range(length):

            i = randint(min_val, max_val)

        arr.append(i)

        x += 1</p>

<p>    return arr</p>

<p>if __name__ == "__main__":

    input_string = input("세 정수를 입력하세요: ")

    splited_input = input_string.split()

    min_val, max_val, length = map(int, splited_input)</p>

<p>    array = generate_random_signal(min_val, max_val, length)</p>

<p>    print(array)</p>

<p>

 

+ main.py

</p>

<p>from random import randint

# from lab4_기본 import generate_random_signal</p>

<p>from generate_random_signal import *</p>

<p>def find_zero(arr):

    for i in range(len(arr)):

        if arr[i] == 0:

            return True

    return False</p>

<p>def random_signal_with_zero(arr, min_val, max_val, length):

    generate_random_signal(min_val, max_val, length)

    if find_zero(arr) == 0:

        while find_zero(arr) == False:

            if min_val > 0:

                min_val = 0</p>

<p>            print("reset-param: { min_val: " + str(min_val) + ", max_val: " + str(max_val) + ", length: " + str(length) + " }")

            arr = generate_random_signal(min_val, max_val, length)

            print("re-generate: " + str(arr))</p>

<p>            if find_zero(arr) == True:

                break

    return arr</p>

<p>if __name__ == "__main__":

    min_val, max_val, length = map(int, input("세 정수를 입력하세요: ").split())

    array = [min_val, max_val, length]

    print(array)

    array = random_signal_with_zero(array, min_val, max_val, length)

    print(array)</p>

<p>

 

+ 실행샘플

</p>

<p>세 정수를 입력하세요: 1 3 3

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [1, 3, 2]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [1, 1, 2]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [2, 2, 3]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [2, 3, 3]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [3, 2, 3]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [2, 2, 2]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [2, 1, 2]

reset param { min_val: 0, max_val: 3, length: 3 }

regenerate: [1, 1, 0]

[1, 1, 0]</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

로그인