Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Вопросы о Python-е

Автор Квас, декабря 23, 2011, 00:14

0 Пользователи и 1 гость просматривают эту тему.

RawonaM


Vertaler

Цитата: Hellerick от апреля 16, 2014, 04:42
Цитировать>>> (2 or 3) * (5 and 7)
14

Ась? :what:
Для or возвращается первый истинный элемент, а для and — последний. Применимо в случае, например, (x or 3), что означает «если x не определён, подставить 3».
Стрч прст в крк и вынь сухим.

RawonaM

Цитата: Vertaler от апреля 16, 2014, 11:32
Цитата: Hellerick от апреля 16, 2014, 04:42
Цитировать>>> (2 or 3) * (5 and 7)
14

Ась? :what:
Для or возвращается первый истинный элемент, а для and — последний. Применимо в случае, например, (x or 3), что означает «если x не определён, подставить 3».
Точнее, если «если x == false, подставить 3».
Х может быть определен, но если это допустим 0 или пустая строка, то это фолз.


Hellerick

Спасибо за объяснения.

Цитата: RawonaM от апреля 16, 2014, 11:23
Все правильно, а вы что ожидали?

Я думал, что 2 or 3 вернет True.

arseniiv

Цитата: Hellerick от апреля 16, 2014, 04:42
Цитировать>>> (2 or 3) * (5 and 7)
14
Ась? :what:
Кстати, C# так тоже может. Не помню только, сразу переопределены ли для чисел true и false или надо самому.

Там a || b для не boolов эквивалентно true(a) ? a : b, но не true(a) ? true : b.

Тайльнемер

Цитата: arseniiv от апреля 16, 2014, 17:14
Кстати, C# так тоже может. Не помню только, сразу переопределены ли для чисел true и false или надо самому.
Там a || b для не boolов эквивалентно true(a) ? a : b, но не true(a) ? true : b.
Ты серьёзно или шутишь? Или ты перепутал C# с чем-то другим? С джаваскриптом?

В C#'е:
1) Оператор || для чисел не определён.
2) Переопределять операторы на числах нельзя. (Один из операндов оператора при переопределении должен быть того же класса, в котором этот оператор переопределяется. Влезть в тип int не получится.)
3) Операторы || и && вообще нельзя явно переопределить. Они будут вычисляться сами, если переопределить false и true.
4) Оператор ||, кажется, всегда возвращает bool.

Тайльнемер

Цитата: Тайльнемер от апреля 16, 2014, 20:26
3) Операторы || и && вообще нельзя явно переопределить. Они будут вычисляться сами, если переопределить false и true.
4) Оператор ||, кажется, всегда возвращает bool.
Сори, я тоже ошибся.
Операторы || и && будут вычисляться сами, если переопределить false, true, | и &.
Операторы || и && будут возвращать не bool, а тот тип, в котором определены вышеуказанные операторы.


arseniiv

Цитата: Тайльнемер от апреля 16, 2014, 20:26
2) Переопределять операторы на числах нельзя. (Один из операндов оператора при переопределении должен быть того же класса, в котором этот оператор переопределяется. Влезть в тип int не получится.)
А как метод расширения? (Не проверял.)

Hellerick

От нечего делать, выполнил школьную задачку: написать программу, которая заполнит матрицу числами по спирали.


Программа выводит:
Цитировать 1  2  3  4  5  6  7
18 19 20 21 22 23  8
17 28 27 26 25 24  9
16 15 14 13 12 11 10

Хотелось бы услышать критику. Любую. Неудачные названия переменных, неоптимальное хранение данных, какие-то лишние шаги и т.п.

Demetrius

Цитата: Hellerick от октября 24, 2013, 15:43
Ну, лично я теперь взял за привычку специально писать так, чтоб и второй (дома), и третий (на работе) пvѳоны код корректно исполняли.
А не проще ли установить дома третий или на работѣ второй?

Hellerick

Теперь и там, и там третий.
Хотя возможность запускать второй (на работе) оставлена. Иногда это создает проблемы.



Upliner

Sancta Maria, Mater Dei, ora pro nobis peccatoribus, nunc et in hora mortis nostrae.

Hellerick


Demetrius

По-моему Питонов код успешно демонстрирует, что гото не нужен ;)

Upliner

Цитата: Hellerick от сентября 22, 2015, 15:34
Цитата: Upliner от сентября 22, 2015, 15:23
Цитата: Hellerick от сентября 22, 2015, 15:18
А он разве им уже не пользовался?
Там goto в части, которая является батником, а не питоновским кодом.
Странный код. Не врубаюсь в него.
Один из примеров кода, написанного сразу на двух языках программирования. Каждый из интерпретаторов либо перепрыгивает код "чужого" языка, либо воспринимает их как комментарии.
Sancta Maria, Mater Dei, ora pro nobis peccatoribus, nunc et in hora mortis nostrae.

Upliner

Sancta Maria, Mater Dei, ora pro nobis peccatoribus, nunc et in hora mortis nostrae.

Python

Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Цитата: Demetrius от сентября 22, 2015, 15:36
По-моему Питонов код успешно демонстрирует, что гото не нужен ;)
В части, где батник — определенно нужен. При отсутствии многострочных комментариев в синтаксисе батника, безусловный переход — практически единственный способ «закомментить» произвольный текст после него (до конца файла или до следующей метки; к счастью, cmd.exe работает как чистый интерпритатор и проверяет синтаксис каждой команды лишь непосредственно перед ее выполнением).
На самом деле можно было сделать проще:

@py -3 -x "%~f0" %* & goto :eof
# some python code...

Но когда создавался тот код, об опции -x (игнорировать первую строку питоновского файла) я не знал.
Впрочем, даже здесь понадобилось бы goto :)
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Hellerick

Нашел у себя программу, которую написал непонятно зачем.


def check(e):
    l = [[i, 1/i] for i in range(1,e+1)]
    s = sum([i[1] for i in l])
    l1=[[0,0,0]]
    for i in l:
        if i[0]==1:
            l1=l1+[[i[0],i[1],i[1]/s]]
        else:
            l1=l1+[[i[0],i[1],l1[i[0]-1][2]+i[1]/s]]
    i=0
    go_on = True
    while go_on:
        i+=1
        if l1[i][2]+l1[i][0]/e>1: go_on = False
    a = l1[i-1][2]+l1[i-1][0]/e
    b = l1[i][2]+l1[i][0]/e
    return (1-a)/(b-a)+i-1

if __name__=='__main__':
    for j in range(6,400):
        elemq=j
        print(j,check(elemq))


Сейчас сижу, пытаюсь понять, что же она делает.

Bhudh

Цитата:     for j in range(6,400):
        elemq=j
        print(j,check(elemq))
Возрастающая функция :donno:.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Hellerick

Вижу, что возрастающая. Но ведь зачем-то я ее городил?
Название файла -- что-то вроде "Zipf vs 2080".

Bhudh

Блин. Закон Ципфа... Чё ж я сразу-то не сообразил... :fp:
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр