Ломается перебор последовательности FOR при добавление в условие IF функции OR

ESEM

Новичок
Пользователь
Дек 21, 2021
5
0
1
byk = input('Введите текст\n')
byk1 = 0
byk2 = 0

for i in byk:
if i == 'а' or 'А':
byk1 += 1

for i2 in byk:
if i2 == 'б' or 'Б':
byk2 += 1

print('Букв А=' + str(byk1), 'Букв Б=' + str(byk2))

не хочет считать как только добавляю (or 'заглавная')

вроде бы это ИЛИ должно накидывать счетчик если одно из условий ТРУ но он почему то начинает тупо считать общее количество символов в ИНПУТе... Подскажите что не так (((
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
Код:
byk = input('Введите текст\n')
byk1 = 0
byk2 = 0

for i in byk:
    if i == 'а' or i == 'А': byk1 += 1

for i2 in byk:
    if i2 == 'б' or i2 ==  'Б': byk2 += 1

print('Букв А=' + str(byk1), 'Букв Б=' + str(byk2))
выделяйте код, расписывать or нужно полностью, а можно и без него, в курсе как? upper\lower
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
забыл сказать, а можно было в скобки взять ('а' or 'А') и всё будет гут..........
 

ESEM

Новичок
Пользователь
Дек 21, 2021
5
0
1
Код:
byk = input('Введите текст\n')
byk1 = 0
byk2 = 0

for i in byk:
    if i == 'а' or i == 'А': byk1 += 1

for i2 in byk:
    if i2 == 'б' or i2 ==  'Б': byk2 += 1

print('Букв А=' + str(byk1), 'Букв Б=' + str(byk2))
выделяйте код, расписывать or нужно полностью, а можно и без него, в курсе как? upper\lower
Мало того что решили мою проблему, так еще и новый метод подсказали. Да - про Апер\Лоуер погуглил - намного логичнее использовать этот метод в данном случае. Проще, короче, опрятнее.

P.S. - не до конца понял почему синтаксис Питона требует повторного указания переменной i для правильной работы, может я не понимаю нюансов, но на моем уровне знаний вроде бы как логично что вариант значения переменной указан как "а или А". Либо так почему то нельзя, либо так просто принято.

ОГРОМНОЕ СПАСИБО!
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
ну так сказал же про второй вариант с помощью ( и )
 

ESEM

Новичок
Пользователь
Дек 21, 2021
5
0
1
забыл сказать, а можно было в скобки взять ('а' or 'А') и всё будет гут..........
Если просто добавить скобки то он считает только 'а' - заглавные игнорирует.

Только начал изучать и все вроде было понятно. Но теперь логика поломалась...

Сейчас буду пробовать вариант со сменой регистра.
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
а ну сорри я не пробовал так, забыл, значит один способ
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Если просто добавить скобки то он считает только 'а' - заглавные игнорирует.

Только начал изучать и все вроде было понятно. Но теперь логика поломалась...

Сейчас буду пробовать вариант со сменой регистра.
когда вы пишите так: if i == 'а' or 'А': вы говорите, если и равно а или А, у вас получается два выражения: и равно а, А, условие А всегда истинно, так как это не пустая строка...
что бы условие работало так как вы хотите, нужно писать так if i == 'а' or i == 'А':, в таком случае получается выражение: и равно а или и равно А, все верно и логично...
 

ESEM

Новичок
Пользователь
Дек 21, 2021
5
0
1
а ну сорри я не пробовал так, забыл, значит один способ

когда вы пишите так: if i == 'а' or 'А': вы говорите, если и равно а или А, у вас получается два выражения: и равно а, А, условие А всегда истинно, так как это не пустая строка...
что бы условие работало так как вы хотите, нужно писать так if i == 'а' or i == 'А':, в таком случае получается выражение: и равно а или и равно А, все верно и логично...
Завис на 3 минуты - но потом осенило. Да, выходит что у меня записано: если и = а, или А (а чего или А???). Теперь логика ясна )))
Огромное спасибо!
 

ESEM

Новичок
Пользователь
Дек 21, 2021
5
0
1
а ну сорри я не пробовал так, забыл, значит один способ
Попробовал вариант метода .lower() - отлично работает.
Тут еще подсказали как этот же результат получить с кодом в 10 раз более коротким через вложенный цикл. У меня там эта байда расписана для каждой буквы алфавита только представьте )))

Код:
Код:
while True:
    byk = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
    sayt = input('Введите текст\n')
    saytx = sayt.lower()

    for i in byk:
        count = 0
        for r in saytx:
            if i == r:
                count +=1
        if count > 0:

            print('Букв', i, 'было', count)
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
получился же вечный цикл, а вообще
Код:
byk = 'Введите текст: ввели абракадабра+АБРАКАДАБРА'
byk1 = 0
byk2 = 0

for i in byk:
    if i == 'а' or i == 'А': byk1 += 1

for i2 in byk:
    if i2 == 'б' or i2 ==  'Б': byk2 += 1

print('Букв А=' + str(byk1), 'Букв Б=' + str(byk2))
пишется в одну - две строки без циклов, а с count
 

Форум IT Специалистов