2016-08-19 10 views
7

パラメータとして範囲を取るランダムな文字ジェネレータがPythonにあるのですか? たとえば、AとDの間の範囲を指定したいとしたら?範囲にランダムな文字ジェネレータがありますか?

import random 
import string 

random.choice(string.ascii_letters) 

しかし、あなたはそれを範囲として指定することはできません。

+3

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

+0

65から90までの乱数を得て、それをASCII文字に変換することができます。 – GrizzlyManBear

答えて

9

あなたはstring.ascii_lettersをスライスすることができます

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

Asciiは数字で表されるので、好きな範囲の数字をランダムにしてからcharにキャストすることができます。

3

機能choiceは、一般的な配列をとります。

空でないシーケンスseqからランダム要素を返します。特定の

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

は、あなたがやりたいだろう。

あなたは簡単にプログラム的範囲を生成することができます。

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

文字列のスライシングこれは、ランダムに選択することになり、この

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

に私の解決策になりますアルファベットの最初の4文字の1つ。明らかに4は任意の値である可能性があります。

1

あなたは自明のようなものを定義することができます。以上により

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] 

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

それともあなたがそれらすべてを入力したくないので、それはより広い範囲のif :

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

オリジナルのwa無作為な手紙を手に入れたら、単純にそのような機能を作ることができます。 getLetter('a', 'd')

1

のようにそれを呼び出す

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

はこれを見て、私はちょうど書いたアルゴリズムは役に立ちかもしれないと思いました。これにより、N長のランダムな大文字のASCII文字列が生成されます。

from random import randint 

def generate_random_nlength_string(n): 
    prandstr = [chr(randint(65,90)) for _ in range(n)] 
    return ''.join(prandstr) 
関連する問題