как приравнять аргумент функции к 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.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Вам нужна функция 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
→ Ссылка