2013-06-13 3 views
2

Я новичок в Python, и я начал изучать основы. Я парень C++, поэтому оператор // был чем-то новым. Согласно с книгой, что я читал:Операторы Python и // на 2.7.4

>> 4/2 
2.0 
>> 2/4 
0.5 
>> 5//4 
2 
>> 2//4 
0 

Проблема заключается в том, что, когда я пишу 5//4 результат 1, когда я пишу 4/2 результат 2, а не 2,0, а когда я пишу 2/4 результат 0. Я должен написать `2.0/4.0 ', чтобы получить 0.5. Являются ли эти ошибки автора или я делаю что-то неправильно?

Я использую Python 2.7.4, [GCC 4.7.3] на linux2

+0

Говорит ли книга, какую версию python она использует? –

+0

@JoshLee Я не могу найти его, я не знаю, упомянул ли он об этом, но книга была опубликована в 2013 году, поэтому я полагаю, что это 2.5 или новее. –

+1

Из результата, показанного для '4/2', похоже, что книга использует Python 3.x. Однако в обоих Python 2.x и 3.x '5 // 4' есть' 1'. – martineau

ответ

6

В Python 2.x стандартным оператором деления является «Classic dvision». Это означает, что /, когда используется с целыми операторами, приведет к целочисленному делению, аналогичному C [т.е. 4/3 = 1].

В Python 3.x это изменение. Там / относится к «Истинное деление» [4/3 = 1.3333..], тогда как // используется для запроса «Классическое/этажное разделение».

Если вы хотите включить «True division» в Python 2.7, вы можете использовать from __future__ import division в своем коде.

Источник: PEP 238

Например:

>>> 4/3 
1 
>>> 4//3 
1 
>>> from __future__ import division 
>>> 4/3 
1.3333333333333333 
>>> 4//3 
1 
1

Разница возникает в случае Python 3.x. В Python 3.0, 7/2 вернется 3.5 и 7 // 2 вернется . Оператор / - floating point division, а оператор // - floor division или integer division.

Но в случае Python 2.x не будет никакой разницы, и текст не прав. Я верю, вот вывод, который я получаю.

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on 
win32 
Type "copyright", "credits" or "license()" for more information. 
>>> 4/2 
2 
>>> 2/4 
0 
>>> 5//4 
1 
>>> 2//4 
0 
>>> 
0

//, кажется, работает правильно,

Смотрите эту tutorial на операторов.

// = покрытие Отдел - Разделение операндов, где результат является фактором, в котором цифра после десятичной запятой удаляется. 9 //-равно 4 и 9.0 // 2.0 равно 4.0

для 4/2 равных 2.0 вам нужно указать поплавок. Например: 4/float(2) оценивает по: 2.0. Индексы 4 и 2 еще не определены как floats при разделении.

Надеюсь, это поможет!

0

В Python 2.7 и предшествующий, всегда целочисленное деление, если нет поплавка. Оба/и // являются целыми делениями в python 2.7 и ранее.

>>>4/3 
1 
>>>4//3 
1 
>>>4/2.0 
2.0 
>>> 4//1.5 
2.0 

В питоне 3.2, а затем /для поплавка деления и // для целочисленного деления

>>>4/2 
2 
>>>4/2.0 
2.0 
>>>3/2 
1.5 

Таким образом, в Python 2.7, если вы хотите вернуть точное число с плавающей запятой, делитель или делитель должен быть плавающим, иначе вы получите целочисленное деление, независимо от того, какой символ вы используете для деления/или //. Если вы используете float с //, вы получите целое число с .0 в конце.

В python 3.2 ++, если вы хотите использовать целочисленное деление, которое вы используете //, если вы хотите использовать плавающее подразделение, которое вы используете /.

см. this за различия между версиями python.

Смежные вопросы