2016-05-24 2 views
-3

Pythonで元の文字列の間隔を維持しながら文字列をランダム化する方法はありますか?例えばスペースを維持する自然言語からのランダムな文字列ですか?

s = 'Egt jkowe tzlmb hea etrua djom krg iahs pqh.' 
+3

ここで、動作しないコードはありますか?何が間違っているのかわからずにあなたの*問題を解決することはできません。 – Prune

+1

また、問題の説明は明確ではありません。アルファベットから無作為に選ばれた手紙で、文章中の各手紙を置き換えたいと思っていますか?あなたが与える出力は元の文字のまっすぐな順列ではありません。 – Prune

答えて

0

s = 'The quick brown fox jumps over the lazy dog.' 

は、特定の長さの文字列をランダム化し、その後、間の空間でそれらを連結します。私はPythonに慣れていませんが、適切な書式設定をしています: s =(ランダム3長ストリング)+ "(ランダム5長ストリング)+" "+ ...など

1

random.choice

import random 
import string 
random_letter = lambda: random.choice(string.ascii_lowercase) 
print(''.join(c if not c.isalpha() else random_letter() for c in s).capitalize()) 

Nka hubqs irhmx ddz sffrq syne jsf mdsn sox. 
+0

OPの希望の結果を見てください。これは手元の問題に対処していません。しかし、それは良いスタートです - これは適切に更新されますか? – Prune

+0

@Prune確かに、私は質問を誤解しました。この方法は、実際にはより洗練されたソリューションです。 – aldanor

+0

あなたはまだ複雑すぎると思います。元の出力は入力と同じ頻度カウントを持っていません。入力に** g **が1つありますが、出力には2つあります。元の手紙を手に入れないでください。 OPがなければアルファベットからランダムなものを選んでください。 – Prune

0

あなたはこの記事を参照することができます出力:here

s = 'The quick brown fox jumps over the lazy dog.' 
substr = '' 
res='' 
for i in range(0,len(s)): 
    if s[i] is not ' ': 
     substr += s[i] 
    else: 
     k = ''.join(random.sample(substr,len(substr))) 
     res += k 
     res += ' ' 
     substr = '' 
res += substr 
print (res) 
標準ライブラリから

import random 
s = 'The quick brown fox jumps over the lazy dog.' 
L = [c for c in s.lower() if c.isalpha()] 
random.shuffle(L) 
print(''.join(c if not c.isalpha() else L.pop() for c in s).capitalize()) 

出力文字列だけ元の中に存在する文字から成る

Iky vomwg ojceh uob stphf drel nae zxro qtu. 

出力:

0

ここで、完全な作動液です。 Aldanorの答えを使用しました。

0

  1. 大文字を個別にシャッフルされることになる、と
  2. 小文字を個別にシャッフルされることになる、と
  3. 文字の残りの部分が残されるべきであることが表示されます単独で。

異なるマッピングを作成する必要があります。このようなもの:

import string, random 

def mapString(xs): 
    xs1 = list(xs[:]) 
    random.shuffle(xs1) 
    return dict(zip(xs, xs1)) 

def remapString(string): 
    mapDict = mapString(string.ascii_lowercase) 
    mapDict.update(mapString(string.ascii_uppercase) ) 

    return ''.join([ (mapDict[s] if s in mapDict else s) for s in string]) 
関連する問題