2016-03-07 124 views
0

我似乎無法找到任何答案,但我有一個程序,我需要寫計算機科學1(初學者友好的答案請)。這些是說明。我如何計算一個字符串中出現的次數?

寫一個程序,將模擬此車計數器。

對於這個程序,會有連續的字符串(分成10行,每行50個字符 ),其中「x」代表顛簸之間的空間,「o」代表「顛簸」一個軸。

小型車輛將具有由任意數量的x圍繞的模式「oo」。

中等車輛將有 由x's包圍的模式「oxo」。

大型車輛將具有「oxoxxooo」模式。

爲了方便起見, 車輛不會被分成不同的數據行。例如,以下表示2臺小 車輛,接着2輛中型車輛,最後一個大的車輛: xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx

輸入:有10行數據,每50個字符長。

line1 = 「xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx」 
    line2 = 「ooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」 
    line3 = 「oxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」 
    line4 = 「oxoxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」 
    line5 = 「xxxoxoxxoooxxxxxxoxoxxoooxxxxxxxxoxoxxoooxxxxxxxxx」 
    line6 = 「xoxoxxoooxxxxxooxxxooxxooxxooxxxxxooxxxxooxxxxooxx」 
    line7 = 「oxoxxoxoxxoxoxxoxoxxoxoxxxxxxxoxoxxxxxoxoxxxxxoxox」 
    line8 = 「xooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoo」 
    line9 = 「xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」 
    line10 = 「xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxooo」 

輸出應該是:

12 small 
    11 medium 
    7 large 

我在一號線scount += 1使用count函數試過,如果「xoox」,只是不能似乎找到一個方法來做到這一點。這是我迄今爲止編寫的代碼。

line1 = "xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx" 
line2 = "oxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
line3 = "oxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
line4 = "oxoxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
line5 = "xxxoxoxxoooxxxxxxoxoxxoooxxxxxxxxoxoxxoooxxxxxxxxx" 
line6 = "xoxoxxoooxxxxxooxxxooxxooxxooxxxxxooxxxxooxxxxooxx" 
line7 = "oxoxxoxoxxoxoxxoxoxxoxoxxxxxxxoxoxxxxxoxoxxxxxoxox" 
line8 = "xooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoo" 
line9 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
line10 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxooo" 

scount = 0 
mcount = 0 
lcount = 0 

def replace(lst): 
    scount = lst.count('xoox') 
    mcount = lst.count('oxo') 
    lcount = lst.count('oxoxxooo') 
replace(line1) 
print scount,mcount,lcount 

我最終得到所有的0作爲我的答案。所以我的問題是,我如何計算'xoox','oxo'和'oxoxxooo的數量在一個單行字符串中?

+0

「abcabc」。count(「ab」) //輸出>> 2 –

+0

我不打算給作業回答,但只是指導!已經有關於如何解決你的問題的建議!但這不是什麼大不了的事!你必須工作的地方是確保你不會計算任何模式兩次。您可以觀察到中型車的圖案是大型車的子圖案。你必須說明這一點。 – innoSPG

回答

0

您的問題是scountmcountlcount是全局變量,這不的replace內引用。要改變它們的值,你必須像這樣引用它們:

def replace(lst): 
    global scount, mcount, lcount 
    #rest of function 

希望這有助於!

+0

太棒了!有用。那麼基本上全局函數使得lcount,mcount和lcount在替換函數中是本地的呢?非常感謝你,我在這個 – avbirm

+0

上堅持了30分鐘。是的,全局聲明所做的是讓你引用在函數之外創建的變量。如果你不引用全局變量,你最終在函數內部創建局部變量,即使它們與全局變量名稱相同,也會引用內存中的不同對象。 – MarkyPython

+0

@MarkyPython,在回答您對其他答案的評論後,發現您也提供了答案,我想說我更喜歡您的答案,您只提供指導以幫助學生找到解決方案的最佳途徑。這就是我評論的內容。我想這不是無禮的。 – innoSPG

1

您需要return變量來自內部函數,否則這些將在函數終止後被丟棄。例如,你可以做這樣的:

def replace(lst): 
    scount = lst.count('xoox') 
    mcount = lst.count('oxo') 
    lcount = lst.count('oxoxxooo') 
    return scount, mcount, lcount # Return them 


scount, mcount, lcount = replace(line1) # Save the returned values 
print scount,mcount,lcount # Print the saved values 

這避免了全局變量(無意)覆蓋,因此,建議除非你真的需要使用全局變量,但在大多數情況下,它是足夠的傳遞和返回來自和來自函數的值。

但請注意,我的解決方案不能用作完整答案,因爲每次調用函數時都會覆蓋變量。

+2

如果您的個人意見不是幫助學生做家庭作業,您不應該基於此來投票回答,但您應該根據答案是否清晰,簡明並遵循SO規則來投票回答。 – MarkyPython

+1

@MarkyPython,我明白你的關注!如果你看看這個問題本身,你可以看到我評論了這個問題並提供了指導。 – innoSPG

相關問題