Уменьшить условие цикла while - python

Я пытаюсь создать ограничение, чтобы входная переменная «letter» была буквой алфавита между a и h в этом коде * 1, но я думаю, что есть лучший способ написать условие для цикла.

Спасибо, если кто-то может помочь мне понять, как переписать его меньше.

*1

while (lettera != 'a' and lettera != 'b' and lettera != 'c' and lettera != 'd' and lettera != 'e' and lettera != 'f' and lettera != 'g' and lettera != 'h'):
    lettera= input('Inserisci un valore lettera a-h ')
Пожалуйста, не отправляйте код в виде изображений; вместо этого включите код в виде текста.
Ture Pålsson 20.03.2022 12:32
while lettera not in {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}:
Timus 20.03.2022 12:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
109
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий
while lettera not in 'abcdefgh':

Это не работает, если пользователь вводит пустую строку'' (например, нажав Enter). Чтобы исправить это, вы можете проверить, не является ли строка пустой, например. (lettera == '') or (lettera not in 'abcdefgh') или используйте метод @gajendragarg для преобразования строки в список lettera not in list('abcdefgh')

honk 20.03.2022 12:40

@honk, я удалил свой комментарий. Но вы могли видеть мой комментарий. ?

gajendragarg 20.03.2022 12:48

@gajendragarg Я видел это как раз перед тем, как оно исчезло. Не волнуйтесь, его точно больше нет!

honk 20.03.2022 12:51

@honk, понял! :)

gajendragarg 20.03.2022 12:52

@gajendragarg Почему ты его удалил?

yzhang 21.03.2022 02:40

вы можете использовать функцию Python ord(), чтобы получить ascii-код буквы/символа и проверить диапазон, a-h 97-104.

lettera= input('Inserisci un valore lettera a-h ')
ttt = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
b = all([x != lettera for x in ttt])
while b:
    print(b)

Создание списка(ttt) необходимых писем. Создание списка в генераторе списков со значениями True или False.

[x != lettera for x in ttt]

Применяем к нему функцию all (если есть хотя бы одно значение False, то вернет False.

Привет, не могли бы вы обновить свой ответ, включив в него объяснение того, как это работает и как решает вопрос?

aaossa 20.03.2022 20:34

constraint ... is a letter of the alphabet between a and h

Прямой перевод на Python будет

letter_a = ...
while not 'a' <= letter_a <= 'h':
    letter_a = read("Please try again: ")

Это упростило бы повышение 'h', например, до 'n'. Если можно было бы добавить какую-либо букву, больше подходит ответ от @yzhang.

flag=True
while (flag):
    lettera=input()
    ascii_val = ord(lettera)
    print(ascii_val)
    if ((ascii_val>=97) and (ascii_val<=104)):
        flag=False

Вы можете использовать функцию filter для фильтрации входных данных

lettera= filter(lambda x: x not in "abcdefgh ", input('Inserisci un valore lettera a-h '))

print(*lettera)

Другие вопросы по теме