Эффективность Python - Лучшая версия, чем несколько, если операторы elif - использовать преобразования for - цикл chr ord?
Я беру вступление к онлайн-курсу Python и вот описание проблемы.
Напишите программу, которая выполняет действия, обратные примеру выше: она должна принимать символ в качестве ввода и выводить соответствующее число (от 1 до 26). Ваша программа должна принимать только заглавные буквы. В качестве проверки ошибок выведите неверное значение, если ввод не является заглавной буквой.
Может кто-нибудь ответить более эффективным способом написания следующего?
letter = input()
x = ord(letter)
if x >= ord('A') and x == 65:
print(1)
elif x >= ord('A') and x == 66:
print(2)
elif x >= ord('A') and x == 67:
print(3)
elif x >= ord('A') and x == 68:
print(4)
elif x >= ord('A') and x == 69:
print(5)
elif x >= ord('A') and x == 70:
print(6)
elif x >= ord('A') and x == 71:
print(7)
elif x >= ord('A') and x == 72:
print(8)
else:
print("invalid")
Я думал о какой-то петле для. Я запустил несколько версий циклов for, но не могу понять, как обращаться с итератором и соотносить его с возрастающим значением asci. Спасибо! Эта таблица может помочь
4 ответа
Вам не нужны петли, чтобы решить это. Во-первых, поймите, что вы повторяете первый тест в каждом elif
Итак, давайте потянем это прямо к вершине:
if x < ord('A')
В настоящее время существует только ограниченный диапазон возможных значений для нашего x
, На самом деле, действительные значения для x
также включать x < ord('A')
так что мы можем удалить этот тест:
if x < 65 or x > 72:
print("invalid")
Хорошо, теперь у нас остались только действительные результаты. На самом деле есть очень простая формула для того, что вы печатаете: x - 64
, Так что можете пойти в else
часть:
else:
print(x - 64)
Таким образом, все заканчивается тем, что
x = ord(letter)
if x < 65 or x > 72:
print('invalid')
else:
print(x - 64)
Обратите внимание, что заглавные буквы охватывают больше, чем это. Тем не менее, исправление должно быть довольно простым.
letter = input()
x = ord(letter)
if x>64:
print x-64
else:
print "invalid"
более компактный остроумный оператор
x = ord(input())
print (x-64 if x>64 else 'invalid')
Не отдавая полного решения: вы можете [1] сначала проверить, x
не заглавная буква (проверить string.uppercase
), а затем [2] (теперь, когда вы знаете, x
действительно заглавная буква), вернуть ord(x) - n
где n
порядок, в котором начинаются заглавные буквы (попробуйте ord('A') - 1
).
Надеюсь, это поможет!