2016-08-19 26 views
7

Zastanawiam się, czy w Pythonie jest generator liczb losowych, który przyjmuje zakres jako parametr? Na przykład, jeśli chcę mieć zakres między A i D? Wiem, że możesz użyć tego jako generatora:Czy istnieje generator liczb losowych z zakresem?

import random 
import string 

random.choice(string.ascii_letters) 

Ale to nie pozwala ci dostarczyć jej zakresu.

+3

'random.choice ('ABCD')' ??? –

+0

Możesz uzyskać losową liczbę od 65 do 90, a następnie przekonwertować ją na znak ASCII. – GrizzlyManBear

Odpowiedz

9

Można pokroić string.ascii_letters:

random.choice(string.ascii_letters[0:4]) 
4

Ascii jest reprezentowane liczbami, więc możesz losować liczbę w preferowanym przedziale, a następnie rzucić ją do postaci.

3

Funkcja choice przyjmuje ogólną sekwencję.

Zwraca losowy element z niepustej sekwencji seq.

W szczególności

random.choice(['A', 'B', 'C', 'D']) 

będą robić to, co chcesz.

Można łatwo wygenerować szereg programowo:

random.choice([chr(c) for c in xrange(ord('A'), ord('D')+1)]) 
3

String krojenie byłoby moje rozwiązanie tego

random.choice(string.ascii_letters[:4]) 

To losowo wybrać jedna z pierwszych 4 liter alfabetu. Oczywiście 4 może być jakąkolwiek wartością.

1

Można trywialnie określić coś takiego:

def letters_in_range(start_letter, end_letter): 
    start_index = string.ascii_letters.find(start_letter) 
    end_index = string.ascii_letters.find(end_letter) 
    assert start_index != -1 
    assert end_index != -1 
    assert start_letter < end_letter 
    return string.ascii_letters[start_index:end_index] 

Z powyższego:

random.choice(letters_in_range('A', 'D')) 
2
>>> random.choice('ABCD') 
'C' 

lub jeśli jest większy zasięg, więc nie chcę ich wszystkich typów out :

>>> chr(random.randint(ord('I'), ord('Q'))) 
'O' 
1

Korzystanie z oryginalnego wa y otrzymania losowej litery można po prostu wykonać funkcję jako taką.

def getLetter(start, stop): 
    letter = random.choice(string.ascii_letters) 
    while letter < start and letter > stop: 
     letter = random.choice(string.ascii_letters) 
    return letter 

Nazywając to jak getLetter('a', 'd')

1

zobaczył to i myśli algorytm Właśnie napisałem może być pomocne. Generuje to losowy łańcuch znaków ASC o długości N:

from random import randint 

def generate_random_nlength_string(n): 
    prandstr = [chr(randint(65,90)) for _ in range(n)] 
    return ''.join(prandstr) 
Powiązane problemy