2017-09-30 11 views
1

私は、文字列を受け取り、それを文字列のベクトルに変換し、空白と演算子を区切らずにこのベクトルを返す関数を作成しましたが、変数iが値を更新しないことがわかったので、しばらくすると、私は更新されていないので、挿入を繰り返しますか? OBS:既存の方法を使用することを許可されていない、例えば、スプリット...ベクトルの文字列 - 変数の更新

def vector(exp): 
    Exp = [] 
    for i in range(len(exp)):   
     if exp[i] != ' ' and exp[i] != '+': 
      j = i 
      while exp[i] != ' ' and exp[i] != '+' and i < len(exp):    
       i += 1 
      valor = exp[j:i] 
      Exp.append(valor)  
     elif exp[i] == '+': 
      Exp.append(exp[i])   
    return Exp 

exp = '3563 + 36+ 27' 
print(vector(exp)) 
+0

'exp.split(」「)をしない理由は、'? '[' 3563 '、' + '、' 36 '、' + '、' 27 ']' –

+0

これは許されません。文字列を扱うための既存のメソッドを使用しないでください。 –

+1

あなたの質問に追加する必要があります。 –

答えて

2

問題のカップル、あなたはすでにforループとループは常に希望と混合していない一方で、発見しているとして、効果。外部ループでwhileループを使用することで、これらの問題のいくつかを回避できます。

内側のwhileループでは、i < len(exp)チェックを上に移動する必要があります。あなたがしない場合、exp[i] != ' 'は大きすぎるi値で評価され、範囲外のエラーのインデックスを取得します。

i < len(exp)を前面に移動すると、これが失敗し、残りの条件が評価されなくなります。そのよう

def vector(exp): 
    Exp = [] 
    i=1 
    while i < len(exp): 
     if exp[i] != ' ' and exp[i] != '+': 
      j = i 
      while i < len(exp) and exp[i] != ' ' and exp[i] != '+':    
       i += 1 
      valor = exp[j:i] 
      Exp.append(valor)  
     elif exp[i] == '+': 
      Exp.append(exp[i]) 
     i += 1 
    return Exp 

exp = '3563 + 36 + 27' 
print(vector(exp)) 
関連する問題