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

相关问题