2017-07-14 9 views
1
import random 


def random_letters(): 
    x = random.randrange(0, 28) 
    for i in range (1,29): 
    n = ["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"] 
    print (n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x]) 

random_letters() 

上記は、random_letters()メソッドが呼び出されるたびに文字のランダムシャッフルを印刷しようとしたものですが、動作しません。このエフェクトを生成するためにどのようなアプローチを使用できますか? coldspeedの方法@毎回変数に異なる乱数値を与える方法はありますか?

+2

'random.choice (n) '? – Will

+0

範囲リストを生成し、それをシャッフルして文字を印刷します。 –

+1

これは、リスト宣言の長い間違いではなく、[chr(ord( 'a')+ i)を範囲(26)] 'にすることをお勧めします。これらのことを賢明にしてください! –

答えて

1

x = random.randrange(0, 28)が1つの乱数を返すので、あなたが書いたものは動作しません。n[x]を印刷すると、常に同じ文字になります。ループforループ内にx = random.randrange(0, 28)を宣言したとしても、すべての文字が異なっていることを保証するには不十分です。単純にすべてのループですべての異なる数値を生成する必要があります。

この問題を回避するには、その後、random.shuffleでそれをシャッフルし、文字の印刷、リストシャッフルリストのインデックスを使用してリストをあなたの文字と同じ長さの範囲のリストを作成します

from random import shuffle 

def random_letters(length): 
    n = ["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"] 
    list1 = list(range(len(n))) 
    shuffle(list1) # Try printing list1 after this step 
    for i in range(length): 
     print(n[list1[i]],end="") # The end paramater is here to "concatenate" the characters 

>>> random_letters(6) 
grmöçd 
>>> random_letters(10) 
mbzfeıjkgş 
+0

これをちょっと変えようとしましたが、 'list1 = list(range 6)) 'の代わりに' list1 = list(range(6)) 'の代わりに最初の6文字だけを使い始めると、あなたのメソッドでこれを避けることはできますか? –

+0

あなたは、文字列かどうかを確認するには、forループを使用し、範囲(長さ)の 'for i 'と' print(n [list1 [i]]、end = "") 'を使用します。 –

+1

'random_letters(int(input(" letter_count ")))'のようなものを追加したときの例 –

0
import random 
import numpy as np 

n = np.array(["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"]) 
nLength = np.arange(len(n)) #Generate an array from 0 to the length of n 
np.random.shuffle(nLength) #Randomly shuffle that array 
def random_letters(): 
    m = n[nLength]   #Set m equal to a reordered n according to nLength 
    print (m) 

random_letters() 

もかなりうまく機能し、それ動作するように私の方法は上記のようにnp.arrayします。

あなたが唯一のそれは同じランダム化された文字列を毎回返すようにしたいことを決定した場合、シャッフル法上

np.random.seed(*some number*) 

を設定します。

+1

あなたが初心者で誰かがあなたに怒っていたら、それは飲み込むのが大変です。 ; –

+0

Hmm ...公平なポイント。最終的には非常に役に立つライブラリの紹介にはいいですか?: – SeeDerekEngineer

関連する問題