文字列内の文字を位置だけで置き換えようとしています。
ここに私が持っているものがあります。
for i in pos:
string=string.replace(string[i],r.choice(data))
文字列内の文字を位置だけで置き換えようとしています。
ここに私が持っているものがあります。
for i in pos:
string=string.replace(string[i],r.choice(data))
直接交換しないのはなぜですか?
for i in pos:
newhand=newhand.replace(newhand[i],r.choice(cardset))
に行く:
for i in pos:
newhand[i]=r.choice(cardset)
hand
これは、文字列ではなくリストであると想定しています。プログラムのこの時点で が文字列である
場合、文字列は不変
であるため変更できないため、リストとして保持することをお勧めしますhand
手を文字列として保持したい場合は、いつでも次のことができます。
newhand = ''.join([(x,r.choice(cardset))[i in pos] for i,x in enumerate(newhand)])
しかし、これはnewhand
リストに変換され、それを文字列に結合してから に戻しますnewhand
。
また、行:
if isinstance(pos, int):
pos=(pos,)
次のように変更する必要があります。
pos = [int(index) for index in pos.split(',')]
isinstance
常にfalseを返すため、必要ありません。
まだ文字列を使い続けたい場合は、これが解決策です:
newhand = '{0}{1}{2}'.format(newhand[:i], r.choice(cardset), newhand[i + 1:])
問題は置換機能にあります。replace 関数を呼び出すと、最初の引数のすべてのインスタンスが 2 番目の引数に置き換えられます。
したがって、newhand = AKAK9 の場合、newhand.replace("A","Q") は newhand = QKQK9 になります。
可能であれば、文字列をリストに変更してから、次の手順を実行して特定のインデックスを変更します。
for i in pos:
newhand[i]=r.choice(cardset)
必要に応じて、str() を使用して newhand リストを文字列に戻すことができます。
hand = ''.join(str(e) for e in newhand_list)