Вычисление математических выражений Python

#python #python-3.x

#python #python-3.x

Вопрос:

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

дело в том, что я не понимаю, как python видит каждое из них !!?

  • эти два выражения здесь иногда дают разные результаты:
    • ((column 1)//2) * ((row 1)//2)
    • = (column 1)//2 * (row 1)//2
  • Вот пример:
 rows, columns = 4, 4

for row in range(2, rows 1):
    for column in range(1, columns 1):
        print('*'*15)
        result = ((column 1)//2) * ((row 1)//2)
        f_result = (column 1)//2 * (row 1)//2

        print('>> normal expression:', (column 1)//2, (row 1)//2)
        print('>> second expression:', ((column 1)//2), ((row 1)//2))
        print('>>               row:', row)
        print('>>            column:', column)
        print('>>           Results:', result, f_result)
    print()
 
  • Последние две записи в результатах:
 ***************
>> normal expression: 2 2
>> second expression: 2 2
>>               row: 4
>>            column: 3
>>           Results: 4 5
***************
>> normal expression: 2 2
>> second expression: 2 2
>>               row: 4
>>            column: 4
>>           Results: 4 5
 

Комментарии:

1. Да, и это нормально при использовании целочисленного деления. Если вы не хотите использовать целочисленное деление, используйте / , not // .

2. но я не могу понять, что происходит!!

3. теперь я понял, ответ, приведенный ниже, помог мне

4. Лучшее название помогло бы сделать ответ на вопрос полезным для других людей. Прямо сейчас, кто-то, видящий этот заголовок, не будет знать, что его ответ поможет им, даже если у них действительно есть такая же проблема.

5. … заголовок, который более эффективно связывает вопрос с вашей конкретной технической проблемой, может быть примерно таким: «Почему 2 * 5 // 2 оцените на 5 вместо 4?»

Ответ №1:

Сначала вам нужно понять приоритет оператора, чтобы проверить эту ссылку

Теперь для выражения

 ((col 1)//2) * ((row 1)//2) = (col 1)//2 * (row 1)//2

 
 ((col 1)//2) * ((row 1)//2) = ((4 1)//2) * ((4 1)//2)
                            = (5//2)*(5//2)
                            = 2 * 2
                            = 4
 
 (col 1)//2 * (row 1)//2 = (4 1)//2 * (4 1)//2
                        = 5//2 * 5//2
                        = 2 * 5//2
                        = 10//2 (as * has higher precedence over //)
                        = 5