2017-10-31 10 views
0

私がしようとしているのは、文字列入力として、そして整数入力としてqを取ることです。入力を受け取り、文字列をスライスする範囲として使用します。

「x」はリストです。 xの

s ='abcd' 

q = 2 

入力:

0 2   

1 3 

所望の出力:

abc 

bcd 

コード:

s=input() 
q=int(input()) 
x=list() 
for i in range(q): 
    x.append(list(map(int,input().split()))) 
for i,v in enumerate(x): 
    for j,z in enumerate(v): 
     print(s[v[i]:v[i+1]]) 

問題:

私の出力は、エラーがスローされます。範囲外のインデックス

ab 

ab 

Traceback (most recent call last): File "/home/yash/py/substring.py", line 12, in <module> 
    print(s[v[i]:v[i+1]]) IndexError: list index out of range: 
+0

'プリント(Sの[:Q + 1]は、S [Q-1])'? –

+1

あなたの質問は何ですか?ソリューションは機能しますか?そうでない場合、どのように不足していますか?時間をかけて[ask]とそれに含まれるリンクを読んでください。 – wwii

+0

例外をスローするコードについて質問するときは、コードとしてフォーマットされたcompleste Tracebackを投稿してください。 – wwii

答えて

0

一つの解決策が考えられます。

s = "abcd" 

def slicer(string): 

    return string[int(input("Lower bound (inclusive): ")): \ 
        int(input("Upper bound (inclusive): ")) + 1] 

print("Output: {}".format(slicer(s))) 
print("Output: {}".format(slicer(s))) 

またslice()機能を使用することができます。

s = "abcd" 

def slicer(string): 

    return string[slice(int(input("Lower bound (inclusive): ")), \ 
         int(input("Upper bound (inclusive): ")) + 1)] 

print("Output: {}".format(slicer(s))) 
print("Output: {}".format(slicer(s))) 

いずれの場合も、ユーザーからスライスlistが上限入っまで拘束され、ユーザを含む下に入力戻ります。

出力サンプル:

Lower bound (inclusive): 0 
Upper bound (inclusive): 2 
Output: abc 
Lower bound (inclusive): 1 
Upper bound (inclusive): 3 
Output: bcd 
+1

そこに 's'をハードコードしているのですか?あなたの関数の中で 'string'であるべきではありませんか? –

+0

@JonClements私はしなかった!あなたは正しい、いいキャッチ! –

関連する問題