edhelwen: (Пара слов.)
Edhelwen ([personal profile] edhelwen) wrote2016-07-04 02:51 pm
Entry tags:

(no subject)

Ненавижу Питон.
Теперь не только за ссылки: пол часа убила на поиск ошибки, пока вспомнила, что он считает массив с нулевого элемента, а не первого. А я всё смотрю и недоумеваю: почему на просьбу написать пятый оно мне аут оф рэндж выдаёт.
Чувствую себя такой же дурой, как ту девочку, которая сейчас ушла - второй класс, а человек чётные от нечётных не отличает.

ЗЫ: люди, мне "работу" на две метки разбить, или вам интересна и методика преподавания математики в начальной школе, и недеццкое программирование?

[identity profile] beldmit.livejournal.com 2016-07-04 11:58 am (UTC)(link)
Все нормальные языки нумеруют элементы с нуля...
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2016-07-04 12:15 pm (UTC)(link)
Скажем так, все языки, популярные последние лет двадцать пять.
До этого был и Паскаль, где можно было любой тип-диапазон в качестве типа индекса задать, и бейсик с оператором OPTION BASE. В Алгол-60 тоже я что-то не помню обязательной нумерации с нуля.

[identity profile] beldmit.livejournal.com 2016-07-04 12:17 pm (UTC)(link)
Не, ну диапазон и в Perl можно задать. И, кажется, в Pg SQL.
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2016-07-04 12:25 pm (UTC)(link)
Что-то я не помню, чтобы в Перле можно было бы определить массив (список) с индексами, начинающимися с произвольного числа, и потом к нему так адресоваться, а не вырезать из списка кусок, соответсвующий некоторому диапазону или присвоить ЗНАЧЕНЯМ списка некотоорый диапазон другого типа.

Впрочем, в перле есть хэши (а в питоне - словари) которые обесечивают еще большую гибкость.

[identity profile] back-to-elfing.livejournal.com 2016-07-04 12:37 pm (UTC)(link)
Вы мне, дяденьки, лучше объясните, почему оно не работает:
...
...
...
 for i in range(0,len(W)):
        if i==len(W):
            print("big i")
        elif i==0:                                                                  
            print("null i")            
        else:
            print("between")

Т.е. оно не замечает существования первого элемента и никогда не пишет big i.
Edited 2016-07-04 12:37 (UTC)
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2016-07-04 12:42 pm (UTC)(link)
Нулевой элемент оно прекрасно замечает.

Но вообще нужно сделать print range(0,5) и все сразу станет понятным.

Еще можно s='0123456789'
print s[0:5]

В питоне диапазон никогда не включает правую границу.

range(a,b) значит "такие i, где i>=a и i>b".

Впрочем, я уже советовал language guide читать. Там это написано.

Ну и еще советую запускать python в интерактивном режиме и играться там, выполняя отдельные команды. Это помогает понять что делает та или иная конструкция.

[identity profile] back-to-elfing.livejournal.com 2016-07-04 12:51 pm (UTC)(link)
Увы, я не настолько круто читаю по-английски, чтобы читать что-то кроме детской литературы. Мне советовали (и я таки очень довольна) вот этот самоучитель http://pythonworld.ru/samouchitel-python

У меня проверка сразу насчитала i от 0 до 4, т.е. здесь почему-то решил считать. Но вместо того, чтобы на i=4 (массив из 5 элементов) посылать его в (пиши big i), посылает в else.
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2016-07-04 12:54 pm (UTC)(link)
А вот надо брать и читать. Со словарем. Благо это можно читать как Розеттский камень. Там внутри полно примеров на питоне, которые будут более понятны, чем английский текст вокруг. Заодно и английский подтянется.
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2016-07-04 03:50 pm (UTC)(link)
W — массив из 5 элементов. Чему равно len(W)?

[identity profile] back-to-elfing.livejournal.com 2016-07-04 04:22 pm (UTC)(link)
Давид и Галиаф!
Четырём!
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2016-07-04 04:53 pm (UTC)(link)
А может всё-таки 5?

[identity profile] back-to-elfing.livejournal.com 2016-07-04 05:16 pm (UTC)(link)
Чёрт... Вот что бывает, когда с утра начинаешь...
Это i у меня равно 4, а длина... длина равна 5...
Но я там ниже так сформулировала, что это не важно - оно должно само всё считать... вроде...

Чёрт... При -1 заработала как надо... Пойду ещё покурю этот дикий язык. Спасибо.
Edited 2016-07-04 17:18 (UTC)

[identity profile] back-to-elfing.livejournal.com 2016-07-04 04:24 pm (UTC)(link)
И всё же...
Оно будто не хочет проверять if-ом, единожды убедившись, что i<> проверямому в if значению. Что делать?..

Я даже переформулировала в последовательный вид, но всё равно:
 for i in range(0,len(W)):
        print(i)               
        
        if i==0:                                                                  
            print("null i")
            
        elif i< len(W):
            print("between")

        else:
            print("big i")

И результат
0
null i
1
between
2
between
3
between
4
between
Edited 2016-07-04 17:17 (UTC)