@atsin4469

Как сделать корректную проверку на то, что символ не принадлежит строке?

Есть вот такой код:
alphabet = 'abcdefghijklmnopqrstuvwxyz'

def unpack(arg):
    d = {}
    for index, item in enumerate(arg):
        d[item] = d.get(item, index) + 1
    return d

alphabet_unpacked = unpack(alphabet)

def alphabet_position(text):
    text_lowercase = text.lower()
    result = ''
    i = 0
    while i < len(text_lowercase):
        if text_lowercase[i] not in alphabet:
            continue
        result += str(alphabet_unpacked.get(text_lowercase[i]))
        i += 1
    return result


Он не работает из-за строк:
if text_lowercase[i] not in alphabet:
    continue


Как их переписать, чтобы можно было проверить, что символа нет в alphabet?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
@dmshar
Сама проверка тут ни при чем - она написана правильно.

Но вот это:

if text_lowercase[i] not in alphabet:
            continue


- классический бесконечный цикл.
Вы взяли первый элемент строки, проверили, он в "alphabet" не присутствует, вы переходите к следующей итерации НЕ ИЗМЕНИВ значения i. По сути - опять проверяете тот-же символ. И так до бесконечности.

Просто перенесите i += 1 перед if .

Правда, у вас еще и предел цикла в while задан с ошибкой, и вообще - программа странноватая. Но это уже другой вопрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Drill
atsin4469,
Расскажите о своем мнении, как сделать код лучше?


alphabet = 'abcdefghijklmnopqrstuvwxyz'
text = "The sunset sets at twelve o'clock."

def alphabet_position(text):
    text = ' '.join(char for char in text.lower() if char.isalpha())
    return text.translate({ord(c): str(i) for i,c in enumerate(alphabet,1)})


print(alphabet_position(text))
In [4]: 
20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11
Ответ написан
Комментировать
@qid00000000
Мало что знаю, но информацию найду в гугле
Зачем всё усложнять, когда задача решается довольно быстро:

alphabet = set('abcdefghijklmnopqrstuvwxyz')
def alphabet_position(text):
    lower_text = text.lower()
    result = ''
    for char in lower_text:
        if char not in alphabet:
            result += char
    return result


Зачем использование словарей, вместо множеств; использование while; непонятные конвертации.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы