@DedInside0
Учу Python самостоятельно.

Можете помочь с исправить ошибку в коде?

Задача:
Напишите функцию, которая проверяет, имеют ли два заданных символа один и тот же регистр.

Если какой-либо из символов не является буквой, вернуть -1
Если оба символа имеют одинаковый регистр, верните 1
Если оба символа являются буквами, а не одним и тем же регистром, верните 0


Мой код:

def same_case(a, b):
    meaning_a = 0
    meaning_b = 0
    for i in range(65, 91):
        if i == ord(a):
            meaning_a = 'a'
        elif i == ord(b):
            meaning_b = 'a'

    for i in range(97, 123):
        if i == ord(a):
            meaning_a = 'A'
        elif i == ord(b):
            meaning_b = 'A'

    if meaning_a == 'а' or meaning_a == 'А': # (1)
        pass 
    else:
        meaning_a = 0

    if meaning_b == 'a' or meaning_b == 'А': #(2)
        pass
    else:
        meaning_b = 0

    if (meaning_a == 'a' and meaning_b == 'A') or (meaning_b == 'a' and meaning_a == 'A'):
        return 0
    elif (meaning_a == 'a' and meaning_b == 'a') or (meaning_a == 'A' and meaning_b == 'A'):
        return 1
    else:
        return -1


Однако столкнулся с проблемой. В 1-ом варианте, после того как сработал if, срабатывает else, а во 2-ом - нет. Почему так происходит?
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Что-то как-то перемудрили... Так не проще?:
def func(a, b):
    if not str(a).isalpha() or not str(b).isalpha():
        return -1
    elif a.isupper() and b.isupper():
        return 1
    elif a.islower() and b.islower():
        return 1
    return 0
    
print(func(1, 'a'))
# -1
print(func('a', 'b'))
# 1
print(func('A', 'a'))
# 0
print(func('A', 'B'))
# 1
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Вместо перебора всего диапазона строчных букв на совпадение с искомой проще проверить, входит ли ord(x) в диапазон.
Диапазон задать через range, и создать один список из двух списков из диапазон для маленьких кириллицы и маленьких латиницы. К концу диапазона добавлена 1 так питон при работе с диапазонами не включает само число конца диапазона.
rangeCapital=list ( range(65,91+1) ) + list (range(1040, 1071+1) ) 
if ord(x) in rangeCapital: ....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 16:06
100000 руб./за проект
06 мая 2024, в 15:53
2500 руб./за проект
06 мая 2024, в 15:52
30000 руб./за проект