Обсуждение:Программирование и научные вычисления на языке Python
↑ | Пожалуйста, добавляйте новые темы сверху. |
Вы не даёте описания "что, как и почему", просто пример кода и всё. Пришёл через поисковики, думал толковое объяснение как работать с urllib. А оказалось зря потратил время. 88.154.123.66 14:26, 18 июля 2013 (UTC)
Целочисленное деление
правитьИзвините за беспокойство, уважаемый LeoMat!
Но быть может Вы подскажете мне, Michael-13, начинающему изучать Python, как сократить программный код и одновременно избежать ошибок в вычислениях и их представлении программой? Дело в том, что при использовании символа "/" Python производит целочисленное деление. А дописывать ко всем целым числам точку и ноль: "1 -> 1.0" трудоемко, к тому же всегда есть шанс забыть это сделать. Существует ли способ избежать ошибки и излишней работы? Например путем написания строчки что-то вроде "all .1f", чтобы всем числам присвоить тип float с одним десятичным знаком после запятой. Или изменить функцию "/" с целочисленного на математическое деление: т.е. "/ = / + остаток".(К тому же, часто Python представляет числа в двоичном виде: 2.99999999.., а когда на экран выводится список из нескольких чисел, то он занимает несколько строк, вместо положенной одной. Дописывать форматирование к каждой функции - дело трудоемкое). Надеюсь, Вас не затруднит ответить на мой вопрос здесь же.
Заранее спасибо. Michael-13.
- Конечно, такой способ есть. Язык развивается, и стало ясно, что для тех, кто только начинает программировать, более естественным будет полное соответствие обычным математическим операциям, в том числе и делению, поэтому в версии 3.0 обычному делению соответствует символ /, а целочисленному //. Для того, чтобы сделать то же самое в Python 2.6, следует просто импортировать такую возможность:
>>> from __future__ import division
>>> 7/5
1.3999999999999999
>>> 7//5
1
>>> print 7/5 # выведет результат вполне рационально
1.4
Надеюсь, я ответил на ваш вопрос. LeoMat 10:18, 31 мая 2010 (UTC)
- Спасибо, что Вы нашли время ответить на мой вопрос, LeoMat!
Однако, в основном, приходится работать со списками, а с ними происходит нерациональное деление:
>>> from __future__ import division
>>> print [1/3, 2/3, 5/3]
[0.33333333333333331, 0.66666666666666663, 1.6666666666666667]
Как по умолчанию присвоить всем числам значение с одним десятичным знаком - вопрос остается открытым. Приходится тратить время на различные хитрости -
# -*- coding: cp1251 -*-
from __future__ import division
#print [4/5] #Не рационально
print (4/5) #Рационально
a=4
b=5
f=a/b
print f #Рационально
def c(a,b):
c=a/b
#return c #1.Не рационально
print c #2.Рационально
Искренне надеюсь на Вашу помощь в вопросе представления значения чисел по умолчанию с одним десятичным знаком и, в частности, рационального представления списков.
С уважением, Michael-13. 18:07, 31 мая 2010
- Я не знаю, зачем именно вам нужен вывод именно списков, поэтому отвечать мне довольно сложно. Тот пример, что вы предлагаете, показывает как осуществляется представление дробей с периодом в компьютере. Представление это довольно точно - ошибка обнаруживается всего лишь в 17 знаке после запятой, уменьшение числа знаков уменьшает точность. Если вам просто требуется вывести числа списка с заданной точностью, то конструкция довольна проста и вы можете изменять ее как угодно:
>>> from __future__ import division
>>> a = [1/3, 2/3, 5/3]
>>> for i in a: print '%.1f' % i,
0.3 0.7 1.7
Или можно создавать список строк следующим образом через генерацию:
>>> b = [format(i, '.1f') for i in a]
>>> print b
['0.3', '0.7', '1.7']
Возможны и другие реализации, но непонятно зачем выводить собственно список. Обычно со списком и работают, а выводятся уже результаты — числа в отформатированном виде.
- Благодарю Вас, LeoMat.
С уважением, Michael-13. 11:23, 1 июня 2010.
Sage
правитьА про Sage что-нибудь будет? Kolas 17:49, 1 апреля 2010 (UTC)
- Я лично не очень рад этому проекту. LeoMat 12:09, 2 апреля 2010 (UTC)
a po4emu ne rad? klassniy proekt, a kto avtor etih urokov?
- Из-за того, что под Windows приходится ставить virtualbox, да и сам он весит порядочно. Хотя сам я дома чаще использую Ubuntu, но с тем, чтобы показывать тогда наработки, возникнут проблемы. Наверняка я слишком недооцениваю и уже думаю получше разобраться. Автор уроков — я. LeoMat 15:13, 3 апреля 2010 (UTC)
- Sage пока вообще не очень дружелюбный к пользователям, впрочем как и Ubuntu (последняя не стоит на месте, но в консоль-то лазить еще приходится). Сам помучился устанавливая его - решение было простое, но в туториалах четко и единообразно не прописанное. Но проект многообещающий. Kolas 12:36, 11 апреля 2010 (UTC)
Связывание python и fortran/c/c++: f2py и swig
правитьЗдравствуйте.
Будет ли урок на тему связывания python'а и fortran'а (f2py) или C/C++ (swig)? Могу помочь с написанием подобного урока.
95.79.144.137 03:59, 7 июня 2010 (UTC) Pavel
- Спасибо. Думаю, эта тема будет очень интересна. LeoMat 16:51, 7 июня 2010 (UTC)
Двойной линк на pyweb.ru внизу странички
правитьНе знаю где оставить комментарий...
Собственно внизу страницы имеется двойной линк на один и тот же ресурс с разным описанием
Исправьте пожалуйста :)
217.118.91.89 11:20, 23 октября 2011 (UTC)Артем