Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect calculation of equivalent logical expressions #113651

Closed
vvnvrk opened this issue Jan 2, 2024 · 6 comments
Closed

Incorrect calculation of equivalent logical expressions #113651

vvnvrk opened this issue Jan 2, 2024 · 6 comments

Comments

@vvnvrk
Copy link

vvnvrk commented Jan 2, 2024

Bug report

Bug description:

A training task is given:

It is believed that the letters q and z are less common in English than other letters. You decided to write a program that allows users to enter words and checks whether this word can be considered rare or not. The word you are interested in is contained in the target_word variable.

Let this program display one of two phrases: "Wow! You have entered a rare word!" if the word has the letter q or the letter z, or "This is not a very rare word..." if it does not contain these letters.

The problem has two possible solutions.
Option 1:

if 'q' in target_word or 'z' in target_word:
    print('Wow! You have entered a rare word!')
else:
    print('It's not a very rare word...')

Everything works correctly on the test words 'qarter', 'zero', 'show'.

Option 2:

if ('q' or 'z') in target_word:
    print('Wow! You have entered a rare word!')
else:
   print('It's not a very rare word...')

Everything works correctly on the test words 'qarter' and 'show'.
On the test word 'zero', the calculation of the logical expression does not work correctly.

Conclusion: there is an error in the Python interpreter as a result of which equivalent logical expressions are not evaluated equivalently.

CPython versions tested on:

3.8

Operating systems tested on:

Windows

@vvnvrk vvnvrk added the type-bug An unexpected behavior, bug, or error label Jan 2, 2024
@Eclips4
Copy link
Member

Eclips4 commented Jan 2, 2024

Hello!
There's no bug. Expression ('q' or 'z') always evaluates to 'q', read the https://docs.python.org/3.12/reference/expressions.html?highlight=evaluation#boolean-operations, please:

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

So, 'q' in target_word or 'z' in target_word and ('q' or 'z') in target_word not the same thing.

In future, first of all, ask your question on https://discuss.python.org/c/users/7, please.

@Eclips4 Eclips4 closed this as not planned Won't fix, can't repro, duplicate, stale Jan 2, 2024
@Eclips4 Eclips4 removed the type-bug An unexpected behavior, bug, or error label Jan 2, 2024
@vvnvrk
Copy link
Author

vvnvrk commented Jan 2, 2024 via email

@Eclips4
Copy link
Member

Eclips4 commented Jan 2, 2024

Кирилл! Я не знаком с математическим аппаратом, который позволяет вычислять булевы операции над строками подобным образом. Подскажите, пожалуйста, где я могу с ним познакомиться. И посмотрите математическую логику, там четко выводится эквивалентность (и значит одинаковое логическое значение) этих выражений. вт, 2 янв. 2024 г. в 15:44, Kirill Podoprigora @.>:

Closed #113651 <#113651> as not planned. — Reply to this email directly, view it on GitHub <#113651 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/BEOASWQDGY6Z44M5H7XRGE3YMP6MRAVCNFSM6AAAAABBJ6G54WVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJRGM3DSOJWGE2TSOA . You are receiving this because you authored the thread.Message ID: @.
>

Выражения 'q' in target_word or 'z' in target_word и ('q' or 'z') in target_word семантически являются разными с точки зрения языка. Выше я скинул ссылку на официальную документацию, которая рассказывает про то как выполняется выражение a or b. Здесь нет никакой связи с эквивалентностью

@vvnvrk
Copy link
Author

vvnvrk commented Jan 2, 2024 via email

@Eclips4
Copy link
Member

Eclips4 commented Jan 2, 2024

Кирилл! Вы не сумели меня убедить. Похоже, семантика языка не учитывает контекст вычисления данного логического выражения. По правилам математической логики выражение ('a' or 'b') in str разворачивается в эквивалентное ему выражение 'a' in str or 'b' in str, и соответственно, правильно вычисляется. Попробуйте доказать обратное - и Вы убедитесь в моей правоте. И прошу в качестве аргументов использовать только математический аппарат, а не придуманную семантику языка. Я повторяю, в семантических правилах могла закрасться ошибка. вт, 2 янв. 2024 г. в 16:27, Kirill Podoprigora @.>:

Кирилл! Я не знаком с математическим аппаратом, который позволяет вычислять булевы операции над строками подобным образом. Подскажите, пожалуйста, где я могу с ним познакомиться. И посмотрите математическую логику, там четко выводится эквивалентность (и значит одинаковое логическое значение) этих выражений. вт, 2 янв. 2024 г. в 15:44, Kirill Podoprigora @. >: … <#m_-1531401562878001803_> Closed #113651 <#113651> <#113651 <#113651>> as not planned. — Reply to this email directly, view it on GitHub <#113651 (comment) <#113651 (comment)>>, or unsubscribe https://github.com/notifications/unsubscribe-auth/BEOASWQDGY6Z44M5H7XRGE3YMP6MRAVCNFSM6AAAAABBJ6G54WVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJRGM3DSOJWGE2TSOA https://github.com/notifications/unsubscribe-auth/BEOASWQDGY6Z44M5H7XRGE3YMP6MRAVCNFSM6AAAAABBJ6G54WVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJRGM3DSOJWGE2TSOA . You are receiving this because you authored the thread.Message ID: @.> Выражения 'q' in target_word or 'z' in target_word и ('q' or 'z') in target_word семантически являются разными с точки зрения языка. Выше я скинул ссылку на официальную документацию, которая рассказывает про то как выполняется выражение a or b. Здесь нет никакой связи с эквивалентностью — Reply to this email directly, view it on GitHub <#113651 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/BEOASWVFUBSSKJSWJC5LIQLYMQDLZAVCNFSM6AAAAABBJ6G54WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNZUGAZDKMRTG4 . You are receiving this because you authored the thread.Message ID: @.
>

Это не ошибка, это так задумано.

@vvnvrk
Copy link
Author

vvnvrk commented Jan 2, 2024

Т.е. Вы хотите сказать что ошибка задумана?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants