Строка питона должна содержать 1 цифру и 1 букву - PullRequest
0 голосов
/ 12 сентября 2018

Я сделал функцию, которая требует ввода 2 значений в строку. Я пытаюсь сделать так, чтобы ввод состоял из комбинации 1 цифры и 1 буквы. Пример: 3f 5h У меня есть следующий код, но я не могу заставить работать условие цифры и альфа. Это потому, что .isdigit и .isalpha - это все символы?

def chess(value1, value2):

    if len(value1) == 2 and len(value2) == 2:
        for char in value1, value2:
            if char.isalpha() and char.isdigit():
                print("Input is right format.")
            else:
                print("Input is NOT right format.")
    else:
        print("Input is NOT right format.")

value1, value2 = input('values: ') .split()

chess(value1, value2) 

Использование только

if char.isalpha():

или

if char.isdigit():

похоже на работу. Но вместе они этого не делают.

Ответы [ 4 ]

0 голосов
/ 12 сентября 2018

Я предполагаю, что вы не имеете ни малейшего представления о регулярном выражении в моем ответе, но вы можете сделать что-то подобное и написать функцию для проверки правильности каждого пробела.

def validSpaceFormat(space):
    if len(space) == 2:
        if space[0].isalpha() and space[1].isdigit():
            return True
    return False 

def chess(value1, value2):
    if validSpaceFormat(value1) and validSpaceFormat(value2):
       print("Input correct.")
    else:
        print("Input wrong.")

value1, value2 = input('values: ').split()
chess(value1, value2) 

Предполагается, что люди всегда будут вводить ходы как "X1 Y2"

isalpha() и isdigit() работают только с символами, поэтому вам нужно проиндексировать каждый символ в строке, чтобы проверить, что это такое.

0 голосов
/ 12 сентября 2018

Ответ от BrightOne работал как шарм:

Вы, вероятно, можете использовать регулярные выражения для этого. Сейчас вы можете использовать value1 [0] .isalpha () и value1 [1] .isdigit () и т. Д.

0 голосов
/ 12 сентября 2018
import re
def chess(value1, value2):
    regex = "^\d[a-h]$"
    return all([re.match(regex, s) for s in (value1, value2)])

\d[a-h] будет соответствовать только одной цифре, за которой следует один символ в "abcfefgh". ^ и $ гарантируют, что он соответствует только строкам длины 2. re.match (regex, s) возвращает None, если строка s не соответствует регулярному выражению

0 голосов
/ 12 сентября 2018

Простой способ проверить, имеет ли input длину 2.

if len(a) == 2:
    if (a[0].isdigit() and a[1].isalpha()) or ((a[1].isdigit() and a[0].isalpha())):
        print('yes')
    else:
        print('no')
...