Передача строк в «алфавит», который содержит определенные символы для лексического анализа - PullRequest
0 голосов
/ 15 сентября 2018

В Python я хочу знать, как я могу выдать строки, которые проверяют:

  1. , если что-то содержит только буквенно-цифровые символы
  2. , если что-то содержит только цифры
  3. если что-то не содержит ни буквенно-цифровых символов, ни цифр.

Мне трудно разобраться в синтаксисе, и мне особенно нужны такие строки вместо использования встроенных функцийдля лексического анализа.Следующее прояснит идею того, что я пытаюсь сделать:

alphanumeric=r'[a-zA-Z]+'
digit=r'[0-9]'
other=r'![a-zA-Z_0-9]'
alphabet = {alphanumeric ,digit,other}

Этот алфавит вместе с другими атрибутами DFA будет передан в функцию dfa объекта run_with_input_list () с некоторой определенной пользователем строкой.Структура класса dfa ниже:

class DFA:
    current_state = None

    def __init__(self, states, alphabet, transition_function, start_state, accept_states):  #5-tupple
        self.states = states
        self.alphabet = alphabet
        self.transition_function = transition_function
        self.start_state = start_state
        self.accept_states = accept_states
        self.current_state = start_state
        return

    def transition_to_state_with_input(self, input_value):
        if ((self.current_state, input_value) not in self.transition_function.keys()):
            self.current_state = None
            return
        self.current_state = self.transition_function[(self.current_state, input_value)]
        return

    def in_accept_state(self):
        if self.current_state in self.accept_states:
            print("String Accepted")
        else:
            print("String Rejected")

    def go_to_initial_state(self):
        self.current_state = self.start_state
        return

    def run_with_input_list(self, input_list):
        self.go_to_initial_state()
        for inp in input_list:
            self.transition_to_state_with_input(inp)
            continue
        return self.in_accept_state()

    pass

    def validity(self,input_list):   #checking whether the input string is valid
        for a in input_list:
            if a in self.alphabet:
                continue
            else:
                print("Invalid String")
                return 0
        return 1

Ответы [ 3 ]

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

Я не совсем понял, что значит "выдавать себя", но вот методы, которые вы можете использовать:

1) Проверьте, содержит ли он только алфавиты

print("abcd".isalpha()) #True
print("abcd123".isalpha()) #False
print("123".isalpha()) #False

2) Проверьте, содержит ли оно только цифры

print("123".isnumeric()) #True
print("abcd".isnumeric()) #False
print("abcd123".isnumeric()) #False

3) Проверьте, содержит ли он только буквы / цифры

print("abc123".isalnum()) #True
print("abc???".isalnum()) #False
0 голосов
/ 15 сентября 2018

Python предоставляет стандартные помощники для такой операции, посмотрите на этот пример:

def what_is(s):
    is_num = s.isnumeric()
    is_alpha = s.isalpha()
    is_other = not is_num and not is_alpha
    return is_num, is_alpha, is_other


def main():
    alpha = "Ciao"
    num = "0102"
    other = "£*+]"
    print(what_is(alpha))
    print(what_is(num))
    print(what_is(other))
0 голосов
/ 15 сентября 2018

Регулярные выражения Python уже имеют специальные символы для этого - цифра имеет \d буквенно-цифровой имеет \w, не алфавитно-цифровой символ имеет \W.

Рекомендации: https://docs.python.org/3/howto/regex.html

...