尝试仅按位置替换字符串中的字符。
这是我所拥有的,任何帮助将不胜感激!
for i in pos:
string=string.replace(string[i],r.choice(data))
答案 0 :(得分:1)
为什么不直接替换它?
for i in pos:
newhand=newhand.replace(newhand[i],r.choice(cardset))
转到:
for i in pos:
newhand[i]=r.choice(cardset)
这假设hand
是一个列表而不是一个字符串
如果hand
是程序中此时的字符串,则为
我建议将其保留为列表,因为字符串无法更改,因为它们是immutable
如果你想把手放在一个字符串上,你总是可以这样做:
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。
答案 1 :(得分:1)
如果你想继续使用字符串,这就是解决方案:
newhand = '{0}{1}{2}'.format(newhand[:i], r.choice(cardset), newhand[i + 1:])
答案 2 :(得分:1)
您的问题在于替换功能。当你调用replace函数时,它用第二个参数替换第一个参数的 ALL 个实例。
所以,如果newhand = AKAK9,newhand.replace(“A”,“Q”)将导致newhand = QKQK9。
如果可能,将字符串更改为列表,然后执行以下操作以更改特定索引:
for i in pos:
newhand[i]=r.choice(cardset)
如果需要,您可以使用str():
将新手列表更改回字符串hand = ''.join(str(e) for e in newhand_list)