2017-10-12 8 views
2

のうちリストインデックスだから私はプログラミングにかなり新しいですし、ちょうど最近クラスで開始し、私たちは別々のテキストファイルにロードできる電話帳を作ることになっています。forループエラー:範囲

私は、しかし、私は、forループに入ることをこのセクションの問題に実行し続けます。それは

if storage[2] == permaStorage[i].number: 

にレンガの壁に当たったと私に語っ「はIndexError:範囲外のリストインデックス」。私はそれがpermaStorageが空になっていることによるとはほとんど確信していますが、電話帳の一時的なインスタンスでそれを記入しようとしても、それは範囲外です。それが存在する主な理由は、permaStorage内に電話番号がすでに存在するかどうかを確認することです。

誰もがこの問題を解決するか、それを回避する方法についての良いヒントを得ましたか。

class Phonebook(): 
    def __init__(self): 
     self.name = '' 
     self.number = '' 

def Add(name1, number1): 
    y = Phonebook() 
    y.name = name1 
    y.number = number1 
    return y 

def Main(): 
    permaStorage = [] 
    while True: 
     print " add name number\n lookup name\n alias name newname\n change name number\n save filename\n load filename\n quit\n" 
     choices = raw_input ("What would you like to do?: ") 
     storage = choices.split(" ") 
     if storage[0] == "add": 
      for i in range(0, len(permaStorage)+1): 
       if storage[2] == permaStorage[i].number: 
        print "This number already exists. No two people can have the same phonenumber!\n" 
        break 
       if i == len(permaStorage): 
        print "hej" 
        try: 
         tempbox = Add(storage[1], storage[2]) 
         permaStorage.append(tempbox) 
        except: 
         raw_input ("Remember to write name and phonenumber! Press any key to continue \n") 
+0

はなぜ'範囲(0、LEN(permaStorage)+1)で '私のために(permaStorage)で+ 1 'lenは? –

+0

私はpermaStorageの長さに等しい定義された範囲を持つようにそれを加えました。 +1はそれを最初から始めることでしたが、必要性はほとんどなく、後で問題を引き起こします。 –

答えて

0

私はこの問題は、permaStorageが空リストであるということだと思うし、次にuがしよう:permaStorageが0のアイテムを持っているので

for i in range(0, len(permaStorage)+1): 
      if storage[2] == permaStorage[i].number: 

は、エラーが発生しますが、uが最初に取得しようとしている(I = 0、permaStorage [0] )項目。

私は最初のものと句場合は、第二置き換えるべきだと思う:perStorageが空白の場合句はOKになる場合

for i in range(0, len(permaStorage)+1):  
    if i == len(permaStorage): 
       print "hej" 
       try: 
        tempbox = Add(storage[1], storage[2]) 
        permaStorage.append(tempbox) 
    if storage[2] == permaStorage[i].number: 
       print "This number already exists. No two people can have the same phonenumber!\n" 
       break 

だからこのケースではあなたには、いくつかの値と、次を追加します。 `:

+0

ありがとうございました!それはうまくいきましたが、それは2番目の部分では "彼の番号がすでに存在しています"と表示されているという小さな問題を引き起こしますが、2人は同じ電話番号を持つことはできません!\ n " –

+0

ええ、forループの開始時に "permaStorage"が空であることを確認する追加の検証を追加することができます:もしそうでなければ、permaStorage:tempbox = Add(storage [1]、storage [2]) permaStorage.append(tempbox) –

0

(ジャストスタイルに確認してください。このサイトに参加していない。テキストがひどく書かれている場合は申し訳ありませんが)インデックスは、Pythonでゼロから始まります。したがって、長さ5のリストは、0から始まる最後の要素インデックスが4になります。範囲をrange(0, len(permastorage))

+0

ありがとう!残念ながら、PermaStorageの長さが空になっているので、問題は解決しません。それが実行されるエラーは 'if storage [2] == permaStorage [i]をチェックしようとするときです。number: ' –

+0

permayorageのelemの場合は のようにリストを反復することもできます。 #storageの場合は の場合は の場合は を試してください。 – yesemsanthoshkumar

+0

動作しませんでした。ループ全体を完全にスキップしました。 'len(permaStorage)+ 1'のようにループが始まったときに実行される主な問題は、リストインデックスが範囲外であるということです。' storage [2] == permaStorage [i] .number' –

0

まで変更してください。リストの最後の要素まで繰り返す必要があります。

TRY -

for i in range(0, len(permaStorage)):

range()で生産番号のリストが最初からですが、最後は含まないので、range(3) == [0, 1, 2]

あなたのリストxが長さ10の場合、range(0, len(x))はあなたのリストの要素の正しいインデックスである0から9を与えます。

1len(x)を追加すると、範囲0 through 10が生成され、x[10]にアクセスしようとすると失敗します。