2014-11-20 3 views
0

Мне интересно, почему эта ошибка возникает, IndexError: индекс индекса за пределами диапазона. Если требуется полная программа, я загружу, но ошибка находится в этой части кода.Получение «IndexError: индекс индекса за пределами диапазона»

import random 
Sign = ["+-*"] 
num = int(random.random()*2) 
operator = (Sign[num]) 
digit = int(random*10) 

Это предназначено для вывода случайного знака массива.

ответ

0

Ваш список содержит только один элемент. Попробуйте это:

Sign = ["+", "-", "*"] 
+0

Это исправляет часть кода. Спасибо, чувак! – swagdaddy

1

random.random() возвращает число с плавающей точкой, которое больше 0 и меньше 1, так int(random.random()*2) будет только когда-либо привести к 0 или 1. Модуль random имеет определенную функцию, чтобы возвращать случайные целые числа в заданный диапазон, который проще использовать, чем «сворачивание собственного» алгоритма случайных чисел (и с результатами, которые обычно более однородны).

Но random также имеет функцию возврата случайного элемента последовательности (например, str, кортеж или список), поэтому целесообразно использовать это для выбора вашего случайного оператора. Например,

#! /usr/bin/env python 

import random 

sign = "+-*" 

for i in range(10): 
    op = random.choice(sign) 
    digit = random.randint(0, 9) 
    print op, digit 

типичный выход

+ 7 
* 9 
+ 0 
* 6 
* 8 
* 5 
+ 0 
- 1 
- 6 
- 3 

Я изменил имя переменной op в этом коде, потому что operator это имя стандартного модуля. Это не ошибка для использования этого имени для ваших собственных переменных, но это определенно вызовет проблемы, если вы хотите импортировать этот модуль. И это также сбивает с толку людей, читающих ваш код.