1

文字列内の文字を位置だけで置き換えようとしています。

ここに私が持っているものがあります。

for i in pos:
    string=string.replace(string[i],r.choice(data))
4

3 に答える 3

2

直接交換しないのはなぜですか?

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を返すため、必要ありません。

于 2013-03-28T03:46:03.357 に答える
1

まだ文字列を使い続けたい場合は、これが解決策です:

newhand = '{0}{1}{2}'.format(newhand[:i], r.choice(cardset), newhand[i + 1:])
于 2013-03-28T03:56:54.747 に答える
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)
于 2013-03-28T03:59:07.507 に答える