3

我正在关注一个 python 网站来完成我的功课。它真的很简洁,它为您提供了在浏览器中完成和编译代码的任务。无论如何,我遇到了一个我不确定该怎么做的挑战。

其中一个问题是:

相同的子串可能在同一个字符串中出现多次:例如“assesses”有 2 次子串“sses”,“trans-Panamanianbanana”有 6 次子串“an”。编写一个接受两行输入的程序,我们称第一个针和第二个干草堆。打印针作为 haystack 的子串出现的次数。

我不太确定我应该如何开始这个,我知道我必须比较两个字符串但是如何?我使用了该count方法,但它无法识别 in 的第二次sses出现assesses

我的第二个问题是我解决的,但我作弊了一点。

问题是:

编写一个程序,输入形式为 «number1»+«number2» 的单个输入行,其中这两个都表示正整数,并输出两个数字的和。例如,在输入 5+12 上,输出应为 17。

我使用了这个eval()方法,它奏效了,我只是认为这不是评分者的想法。

任何见解将不胜感激。

编辑:第二个问题已解决。

4

9 回答 9

3

正如您所注意到的,对于第一个问题,str.count()没有找到重叠的匹配项。相反,str.find()在每次找到匹配项后使用并推进起始索引,直到结果为-1,例如:

>>> 'assesses'.find('sses', 0)    # first look at the start of the string
1
>>> 'assesses'.find('sses', 2)    # now look at previous index + 1
4
>>> 'assesses'.find('sses', 5)    # now look at previous index + 1
-1

由于在我们得到之前有两个结果-1,我们知道有两个位置可以找到'sses''assesses'

对于您的第二个问题,您将需要split()字符串 on '+',这将为您提供两个字符串的列表。调用int()它们中的每一个,然后将它们加在一起。

于 2012-05-25T23:03:19.930 回答
2

这就是您在问题 1 中寻找的内容:

needle = input()    #defines first input string
haystack = input()    #defines second input string
times = 0     #defines number of times first input string is in second
for a in range(0, len(haystack) - 1):     #loop to check strings within haystack
    if haystack[a:len(needle) + a] == needle:     #checking for needle in haystack
        times = times + 1     #increasing our number of occurances if true
print(times)     #and here is your output
于 2012-08-10T19:47:13.210 回答
1

对于我得到的第二个问题:

S = input()
x = S.find('+')
print(int(S[0:x])+(int(S[x+1:]))) 
于 2012-11-06T23:24:25.690 回答
1

两个输入字符串,一个用于总计出现次数的计数器,一个名为 indx 的变量,它将始终作为起始搜索点,一个 loc 变量将是任何 str1 in 出现的开始的(int 类型)索引位置str2

str1 = input() #input 1
str2 = input() #input 2
count=0  #occurrence counter
indx=0  #index of string to start search at
for i in str2:  #for character i in input 2
    loc = str2.find(str1, indx)  #starting index of occurrence
    if loc == -1:  #-1 means there were no occurences
        break  #in this case break the search
    indx=loc+1  #to find the next occurrence, the new starting point will be the starting location of the last occurrence + 1
    count=count+1  #add an occurrence
print(count) #voila!
于 2017-03-07T19:50:50.873 回答
0
  1. STRING.count 方法应该适用于第一个问题。如果你仔细看,在评估中实际上没有两个不重叠的 'sses' 字符串。

    你要么有评估,要么评估。你看到问题了吗?呼叫"trans-Panamanian banana".count("an")产生正确的号码。

  2. 我认为使用 eval() 可能没问题。您的另一个选择是在 + 上拆分,然后遍历结果列表,随时进行类型转换和累积。听起来你在做一个字符串模块,所以这可能是你的 gpa 更好的解决方案;)。

编辑: FG 击败我,仅用几秒钟就发布了基本相同的答案。呸!

于 2012-05-25T23:04:10.693 回答
0
  1. 请参阅:重叠出现的字符串计数

  2. 总和(地图(lambda val:int(val.strip()),INPUT.split(“+”)))

于 2012-05-25T23:54:24.523 回答
0

对于第一个问题,您还可以使用此示例代码:

def occurs(string, sub):
count = start = 0
while True:
    start = string.find(sub, start) + 1
    if start > 0:
        count+=1
    else:
        return count

它会解决你的问题。

于 2012-07-06T14:06:42.767 回答
0

回答第一个问题:

needle=input()
haystack=input()
counter=0
for i in range(0,len(haystack)):
  if(haystack[i:len(needle)+i]!=needle):
     continue
  counter=counter+1
print(counter)

回答第二个问题:

S = input()
for position in range(0, len(S)):
plus=S[position]
    if (plus!="+"):
      continue
    number1=int(S[0:position])
    number2=int(S[position+1:len(S)])
    print(number1+number2)
于 2013-05-18T03:14:46.297 回答
0

我找到了第二个问题的答案:

S=input()
x=len(S)
for i in range (0,x):
   w= S[i]
   if w == '+': 
      a=(S[0:i])
      b=(S[i+1:x])
      u=int(a)
      o=int(b)
      p=u+o
      print(p)
于 2017-09-05T19:27:53.863 回答