【问题标题】:Python - A Question on String EditingPython - 关于字符串编辑的问题
【发布时间】:2025-12-14 04:50:01
【问题描述】:

我正在尝试用 Python 制作一个简单的基于文本的游戏。其思想围绕一副扑克牌展开,用 A、2、3、4、5、6、7、8、9、10、J、Q 和 K 表示牌面值(不使用 Joker) .牌的花色将由 s、d、h 和 c 表示。例如,“红桃 A”将表示为 Ah。

我正在使用两个 random.choice() 函数来选择一个随机面值和一个随机套装,其中 10 用“X”表示。这是我遇到问题的地方。理想情况下,我想将“X”更改为“10”。这是我生成随机卡片的“测试”代码:

import random

firstvar = random.choice('A23456789XJQK')
secondvar = random.choice('sdhc')
newvar = firstvar + secondvar
if newvar[0] == 'X':
    newvar[0] = '10'
    print newvar

else:
    print newvar

我很快发现这会导致错误。

TypeError: 'str' 对象不支持项目分配

简而言之,我的问题是:“如何将程序中的 'X' 更改为 '10'?

感谢您提供的任何帮助。

【问题讨论】:

    标签: python string


    【解决方案1】:

    在连接之前更改它。

    firstvar = random.choice('A23456789XJQK') 
    secondvar = random.choice('sdhc') 
    newvar = (firstvar + secondvar) if firstvar != 'X' else ('10' + secondvar)
    

    或者,不要使用“X”开头:

    firstvar = random.choice(['A', '2', '3', ..., '10', ...])
    

    另一种选择是字符串上的replace 方法:

    newvar = firstvar.replace('X', '10') + secondvar
    

    第二种方法可能最适合这种情况,除非您需要在代码的其他地方使用“X”并且无法更改。值得研究处理不可变字符串的其他方法,因为第二种方法并不总是合适的。

    【讨论】:

    • 我同意 #2,只需将其列一个列表并放入 10,因为这就是您要立即更改的内容。
    • @user470379 是的,这在这种情况下可能是最好的,但字符串的不变性是一个足够常见的绊脚石(我是一个很好的 python 编码器,有时我仍然会绊倒它)值得一看从更一般的角度处理它的所有选项。
    【解决方案2】:

    在 python 中你不能修改字符串。你可以通过创建一个新的字符串来处理这个问题,将 '10' 和原始字符串的其余部分结合起来

    newvar = '10' + newvar[1:]
    

    但这真的很难看。你最好一开始就正确地构造字符串:

    firstvar = random.choice(['A','2','3','4','5','6','7','8','9','10','J','Q', 'K'])
    secondvar = random.choice('sdhc')
    newvar = firstvar + secondvar
    

    如果您来自其他语言,您可能习惯于将操作视为修改字符串。你最好首先正确地创建你的字符串。当然,如果您正在处理来自不同用户输入的字符串。

    【讨论】: