3

私は学業のためにPython Webサイトをフォローしています。これは非常に優れた機能で、ブラウザでコードを完了してコンパイルするタスクを提供します。とにかく、どうしたらいいのかわからないという挑戦に来ました。

質問の1つは次のとおりです。

同じ文字列内に同じ部分文字列が複数回出現する場合があります。たとえば、"asseses" には部分文字列 "sses" が 2 回含まれ、"trans-Panamanian banana" には部分文字列 "an" が 6 回含まれます。2 行の入力を受け取るプログラムを作成します。最初の針と 2 番目の干し草の山を呼び出します。haystack の部分文字列として針が出現する回数を出力します。

2 つの文字列を比較する必要があることはわかっていますが、どのようにすればよいのでしょうか。メソッドを使用しましたが、 incountの 2 回目の出現を認識しませんでした。ssesassesses

私の2番目の質問は私が解決したものですが、少しごまかしました。

質問は次のとおりです。

«number1»+«number2» という形式の 1 行の入力行 (これらは両方とも正の整数を表す) を受け取り、2 つの数値の合計を出力するプログラムを作成します。たとえば、入力 5+12 では、出力は 17 になります。

私はこのeval()方法を使用しましたが、うまくいきました。

どんな洞察も大歓迎です。

編集: 2 番目の質問が解決されました。

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

を取得する前に 2 つの結果があったため、-1には 2 つの場所があることがわかります。'sses''assesses'

2 番目の質問では、2 つの文字列のリストが表示される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

私が得た2番目の質問について:

S = input()
x = S.find('+')
print(int(S[0:x])+(int(S[x+1:]))) 
于 2012-11-06T23:24:25.690 に答える
0
  1. 参照:重複するオカレンスのある文字列数

  2. sum(map(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
  1. STRING.count メソッドは、最初の問題に対しては問題なく機能するはずです。注意深く見ると、 assessに重複しない'sses' 文字列は実際には 2 つありません。

    a -sses- ses、またはassessのいずれかがあります。問題が見えますか?呼び出す"trans-Panamanian banana".count("an")と、正しい番号が生成されます。

  2. おそらく eval() を使用しても問題ないと思います。もう 1 つのオプションは、+ で分割し、結果のリストを反復処理して、型変換と累積を行うことです。文字列モジュールを実行しているように聞こえるので、それが gpa のより良い解決策になる可能性があります;)。

編集: FGは、本質的に同じ回答をわずか数秒で投稿することに私を打ち負かしました。ガッ!

于 2012-05-25T23:04:10.693 に答える
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)

2 番目の質問の答え:

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 に答える