2010-10-29 59 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 

如果是從其他語言,你可以用來思考操作的修改字符串。你最好能夠首先正確地創建你的字符串。當然,如果你正在處理來自不同用戶輸入的字符串。