2010-10-29 83 views
1

我想在Python中制作一个简单的基于文本的游戏。其中围绕一副扑克牌的想法,用A,2,3,4,5,6,7,8,9,10,J,Q和K代表牌面值(不使用小丑) 。这些卡的套装将由s,d,h和c表示。作为一个例子,“红心王”将被表示为Ah。Python - 一个关于字符串编辑的问题

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

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 

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

类型错误:“海峡”对象不支持项目分配

总之,我的问题是:“我怎么会去在我的计划,以‘10’改变‘X’

?感谢您的帮助您连接才可以提供。

回答

2

改变它。

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’在别处那是不能改变的。值得一提的是处理不可变字符串的其他方法,因为第二种方法并不总是合适的。

+0

我同意#2,只是将它列入清单并放入10中,因为这就是您马上改变它的原因。 – user470379 2010-10-29 02:07:25

+0

它完美的作品。谢谢! – 2010-10-29 02:08:44

+0

@ user470379对,在这种情况下这可能是最好的,但字符串的不变性是一个足够常见的绊脚石(我是一个好的python编码器,有时我仍然绊倒它),值得查看所有的处理选项它从更一般的角度来看。 – aaronasterling 2010-10-29 02:12:57

0

在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 

如果是从其他语言,你可以用来思考操作的修改字符串。你最好能够首先正确地创建你的字符串。当然,如果你正在处理来自不同用户输入的字符串。