Я пытаюсь создать ограничение, чтобы входная переменная «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 ')
while lettera not in {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}:
while lettera not in 'abcdefgh':
Это не работает, если пользователь вводит пустую строку''
(например, нажав Enter). Чтобы исправить это, вы можете проверить, не является ли строка пустой, например. (lettera == '') or (lettera not in 'abcdefgh')
или используйте метод @gajendragarg для преобразования строки в список lettera not in list('abcdefgh')
@honk, я удалил свой комментарий. Но вы могли видеть мой комментарий. ?
@gajendragarg Я видел это как раз перед тем, как оно исчезло. Не волнуйтесь, его точно больше нет!
@honk, понял! :)
@gajendragarg Почему ты его удалил?
вы можете использовать функцию 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.
Привет, не могли бы вы обновить свой ответ, включив в него объяснение того, как это работает и как решает вопрос?
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)