특정 숫자의 숫자로 난수를 생성하는 방법은 무엇입니까?
3자리 숫자가 필요하다고 가정하면 다음과 같습니다.
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
또는 를 사용할 수 있습니다. 따라서 임의의 세 자리 숫자를 얻으려면:
from random import randint, randrange
randint(100, 999) # randint is inclusive at both ends
randrange(100, 1000) # randrange is exclusive at the stop
"최대 3자리"가 아니라 실제로 3자리를 의미한다고 가정합니다.
임의 숫자를 사용하는 방법
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
출력:
33
124
5127
문자열(예: 10자리 전화 번호)로 사용하려는 경우 다음을 사용할 수 있습니다.
n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])
3자리 숫자가 필요하고 001-099가 유효한 숫자가 되기를 원한다면 다른 숫자보다 빠르므로 여전히 랜덤 범위/랜딩을 사용해야 합니다.문자열로 변환할 때 필요한 선행 0만 추가하면 됩니다.
import random
num = random.randrange(1, 10**3)
# using format
num_with_zeros = '{:03}'.format(num)
# using string's zfill
num_with_zeros = str(num).zfill(3)
또는 난수를 int로 저장하지 않으려면 하나의 행선지로 저장하면 됩니다.
'{:03}'.format(random.randrange(1, 10**3))
python 3.6+ 한 줄만:
f'{random.randrange(1, 10**3):03}'
위의 출력 예는 다음과 같습니다.
- '026'
- '255'
- '512'
3자리가 아닌 모든 자리 길이를 지원할 수 있는 기능으로 구현:
import random
def n_len_rand(len_, floor=1):
top = 10**len_
if floor > top:
raise ValueError(f"Floor '{floor}' must be less than requested top '{top}'")
return f'{random.randrange(floor, top):0{len_}}'
원하는 작업을 수행할 수 있는 기능을 직접 작성할 수 있습니다.
import random
def randomDigits(digits):
lower = 10**(digits-1)
upper = 10**digits - 1
return random.randint(lower, upper)
기본적으로,10**(digits-1)
가장 작은 {digit}자리 숫자를 제공합니다.10**digits - 1
가장 큰 {digit}자리 숫자를 제공합니다(1을 뺀 가장 작은 {digit+1}자리 숫자입니다!).그런 다음 그 범위에서 임의의 정수를 추출합니다.
0은 가능한 첫 번째 숫자로 계산됩니까?만약 그렇다면, 당신은 필요합니다.random.randint(0,10**n-1)
.아니라면,random.randint(10**(n-1),10**n-1)
그리고 만약 0이 절대 허용되지 않는다면, 0이 들어 있는 숫자를 명시적으로 거부하거나 그림을 그려야 합니다.n
random.randint(1,9)
숫자들
차치하고: 흥미로운 것입니다.randint(a,b)
임의의 숫자를 얻기 위해 다소 비일관적인 "숫자"를 사용합니다.a <= n <= b
다음과 같은 방식으로 작동할 것이라고 예상했을 수 있습니다.range
그리고 난수를 만들어냅니다.a <= n < b
(닫힌 상한 간격을 기록합니다.)
에 대한 댓글에 있는 반응을 고려할 때randrange
이들은 클리너로 교체할 수 있습니다.random.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
그리고.random.randrange(1,10)
.
import random
fixed_digits = 6
print(random.randrange(111111, 999999, fixed_digits))
out:
271533
다음과 같은 함수를 만들 수 있습니다. int 목록을 사용하고 문자열에서 변환하여 연결하고 다시 도트를 캐스팅합니다.
import random
def generate_random_number(length):
return int(''.join([str(random.randint(0,10)) for _ in range(length)]))
저는 리치 힌들의 대답이 정말 마음에 들었지만, 그 질문을 연습 삼아 좋아했습니다.다음은 문자열을 사용한 브루트 포스 구현입니다:)
import random
first = random.randint(1,9)
first = str(first)
n = 5
nrs = [str(random.randrange(10)) for i in range(n-1)]
for i in range(len(nrs)) :
first += str(nrs[i])
print str(first)
공식 문서를 보니 샘플() 방법이 이 목적에 적합하지 않나요?
import random
def random_digits(n):
num = range(0, 10)
lst = random.sample(num, n)
print str(lst).strip('[]')
출력:
>>>random_digits(5)
2, 5, 1, 0, 4
오래된 질문인 것은 알지만 여러 해 동안 많은 해결책을 보았습니다.n자리 랜덤 문자열을 기본값 6으로 만드는 함수에 대한 제 제안입니다.
from random import randint
def OTP(n=6):
n = 1 if n< 1 else n
return randint(int("1"*n), int("9"*n))
물론 "1"*n은 시작하기를 원하는 대로 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2673385/how-to-generate-a-random-number-with-a-specific-amount-of-digits
'sourcecode' 카테고리의 다른 글
"wait_message: 응답을 수신하지 못했습니다. 10004003"? (0) | 2023.07.27 |
---|---|
oracle sql에서 두 날짜 사이의 경과 시간 찾기 (0) | 2023.07.27 |
Python Requests 패키지:xml 응답 처리 (0) | 2023.07.22 |
CreateDatabase를 사용하여 봄부터 utf8mb4 문자 집합으로 데이터베이스를 만드는 방법존재하지 않는 경우? (0) | 2023.07.22 |
sys.argv[x]가 정의되었는지 확인하는 중 (0) | 2023.07.22 |