Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 9, 2014 17:33:40

nixis
Зарегистрирован: 2014-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

Пишу код;
f = open('Имя_файла')

x = 0
num_char_f = len(f.read())
str_f = f.read()

char_x = str_f{x} - Поставил фигурные скобки, потому что квадратные форум стирает.

При трансляции пишет:
IndexError: string index out of range
Но когда стираю строку “num_char_f = len(f.read())”, все работает.

Хоть убей, не пойму почему так. Помогите пожалуйста новичку, не оставайтесь равнодушными)

Офлайн

#2 Апрель 9, 2014 17:48:26

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

f = open('1.py','r')
x = 0
str_f = f.read()
f.close()
num_char_f = len(str_f)
print num_char_f
print str_f
print str_f[x]

Отредактировано sanodin (Апрель 9, 2014 18:03:38)

Офлайн

#3 Апрель 9, 2014 17:58:43

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

>>> f = open("mysql.opt")
>>> f.tell()
0
>>> s = f.read()
>>> s
"#  Options file generated by MySQL client\n\n..." # rest of file here
>>> f.tell()
316
>>> s2 = f.read()
>>> s2
''
>>> s[5]
't'
>>> s2[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
Так понятно?



Отредактировано Lexander (Апрель 9, 2014 18:00:44)

Офлайн

#4 Апрель 9, 2014 19:11:00

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Почему len() збивает индекс?

Та объясните вы нормально новичку. Вот допустим текст состоит из 1-го символа. Его len() равна 1, но индекс этого символа равен 0. Т.е. отнимайте единицу от длины, ибо индекс начинается с нуля, а не с единицы

Офлайн

#5 Апрель 9, 2014 19:13:43

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

У него пустая строка была

Офлайн

#6 Апрель 9, 2014 19:16:19

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Почему len() збивает индекс?

блин. Не успел удалить, уже ответили, по стакану написал, не разобрался.

Офлайн

#7 Апрель 9, 2014 19:52:56

nixis
Зарегистрирован: 2014-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

Правильно ли я понял?
Нельзя писать:
num_char_f = len(f.read())
str_f = f.read()
Нужно:
str_f = f.read()
num_char_f = len(str_f)

И еще, нельзя присвоить переменной то что считалось из файла, если уже есть переменная у которой есть такое значение? Пример кода:
f.open('Имя_файла')
str_1 = f.read()
# Первая переменная
str_2 = f.read()
# Вторая переменная которая будет ругаться
Нужно так:
str_1 = f.read()
str_2 = str_1

Отредактировано nixis (Апрель 9, 2014 20:17:04)

Офлайн

#8 Апрель 9, 2014 20:06:06

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

отдельно можно

Офлайн

#9 Апрель 9, 2014 20:44:01

nixis
Зарегистрирован: 2014-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

Спасибо большое. Вроде дошло)
Век живи, век учись)

Офлайн

#10 Апрель 9, 2014 22:04:41

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Почему len() збивает индекс?

nixis
Если вы действительно хотите научиться, возьмите код, который я привел выше и напротив каждой строчки напишите смысл происходящего, как вы это понимаете. Т.е., что за операция выполняется, какой результат этой операции и почему.
Я готов разобрать его с вами, если у вас будет такое желание.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version