как приравнять аргумент функции к str или int python
def position(alphabet):
a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b = a.lower()
if alphabet == str:
c = b.find(alphabet) + 1
else:
c = b[alphabet]
return "Position of alphabet:{}".format(c)
print(position('f'))
я хочу сделать так что бы когда ты передал в функцию str она выдавала тебя индекс а когда индекс str а еще можете пожалуйста объяснить почему от индекса надо отнимать -1 что бы оно правильно определяла букву(ну конкретно в этом примере )
Ответы (2 шт):
Чтобы узнать тип передаваемой переменной можно воспользоваться функцией type():
Например:
i, s = 10, "string"
print(type(i) is int)
print(type(s) is str)
Вернет:
True
True
А вот пример с вашей функцией:
def position(alphabet):
a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b = a.lower()
if type(alphabet) is str:
c = b.find(alphabet) + 1
else:
c = b[alphabet]
return "Position of alphabet:{}".format(c)
А насчет "почему от индекса надо отнимать -1" это потому, что индексация массивов в python начинается с 0. То есть например есть строка "abcd", тогда индекс a в строке будет = 0, а у символа b уже 1.
Вам нужна функция isinstance. isinstance(<value>, <type>) проверяет что значение value принадлежит типу type. Английский алфавит в Питон встроен string.ascii_lowercase:
import string
def position(arg):
if isinstance(arg, str):
return string.ascii_lowercase.index(arg.lower()) + 1
if isinstance(arg, int):
return string.ascii_lowercase[arg - 1]
print('a ->', position('a'))
print('z ->', position('z'))
print('f ->', position('f'))
print('6 ->', position(6))
a -> 1 z -> 26 f -> 6 6 -> f
Но такой дизайн очень и очень плох. Лучше следовать принципу "одна функция - одно действие":
import string
def position(letter):
return string.ascii_lowercase.index(letter.lower()) + 1
def letter(position):
return string.ascii_lowercase[position - 1]
print('a ->', position('a'))
print('z ->', position('z'))
print('f ->', position('f'))
print('6 ->', letter(6))
a -> 1 z -> 26 f -> 6 6 -> f