2017-01-29 7 views
-2

GCSEリビジョンのトピックからすべての質問をランダムに生成するプログラムを作成しようとしています。私のコードは、ランダムな質問の後にエラーメッセージを生成します。ここでは、エラーメッセージに続いて、私のコードは次のとおりです。Python - IndexError:タプルのインデックスが範囲外です

computing_UNIT4_networks = (["LOCAL AREA NETWORK","A network in one geographical area."],["WIDE AREA NETWORK","A network spanning two or more geographical areas."],["ROUTER","Connects a network to another network, sends and inspects packets of data."],["SWITCH","Channels data to its indented destination, within an internal network."],["NETWORK INTERFACE CARD","A card that allows a computer to connect to the network."],["FIBRE OPTIC CABLE","Uses light to transmit data."],["ETHERNET CABLE","Uses metal wires (usually copper) to transmit data."],["DNS","Used to match IP addresses to URL."],["HOSTING","Storing data for a user, usually a website."],["CLOUD COMPUTING","A remote computer is used to store data and provide services."]) 
computing_UNIT5_protocols = (["STAR NETWORK","All computers are connected 'individually' to the server.(using switches)"],["FULL MESH NETWORK","Every computer is connected to every other."],["ENCRYPTION","Disguising data so that it can be read with the key."],["DATA PACKET","Small unit of data to be transmitted."],["LATENCY","The delay in receiving data."],["BANDWIDTH","The amount of data that can be transmitted in a set amount of time."],["PACKET SWITCHING","Packets of data are transmitted and are able to take individual routes to their destination."],["CIRCUIT SWITCHING","Packets of data are transmitted along the same route to their destination."]) 
done = [] 
def computing(): 
    unit = int(input("Which UNIT are you revising?\n-")) 
    if unit == 4: 
     UNIT = computing_UNIT4_networks 
     print("Here are",len(UNIT),"questions on UNIT4 - Wired and wireless networks.") 
    elif unit == 5: 
     UNIT = computing_UNIT5_protocols 
     print("Here are",len(UNIT),"questions on UNIT5 - Network topologies, protocols and layers.") 
    i=1 
    c=0 
    while i <= (len(UNIT)): 
     import random 
     randint=random.randint(0,len(UNIT)) 
     while randint in done: 
      randint=random.randint(0,len(UNIT)) 
      if randint in done: 
       i=i 
      else: break 
     question = UNIT[randint][1] 
     answer = UNIT[randint][0] 
     print("\nWhat is this the definition of?:",question) 
     b=input("-").upper() 
     if b == answer: 
      c=c+1 
      print("\nCorrect\nCurrent score:",c,"/",i) 
     else: print("\nWrong. The answer was",answer,".\nCurrent score:",c,"/",i) 
     done.append(randint) 
     i = i+1 
    print("\nYou scored",c,"/",len(UNIT),".") 

computing() 

エラーメッセージ:

Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    computing() 
    File "[FILELOCATION]", line 22, in computing 
    question = UNIT[randint][1] 
IndexError: tuple index out of range 
+0

'randint'は終点を含み、' len(UNIT) 'を返すことができます。一般的には、代わりに['randrange'](https://docs.python.org/2/library/random.html#random.randrange)を使用することをお勧めします。 – khelwood

+1

質問を送信する前に、自分でコードを完全にテストしておく必要があります。サポートの最初の行としてSOを使用しないでください。そうすれば、あなたは学ぶことができなくなります。 – Olian04

+0

[PYTHON IndexError:タプル・インデックスが範囲外です](http://stackoverflow.com/questions/24167373/python-indexerror-tuple-index-out-of-range) –

答えて

3

randintは0からlen(UNIT)-1に行く必要があります。値はランダムにlen(UNIT)に達しており、そのインデックスは範囲外です。

関連する問題