strings.string_is_valid_number

Topic: Deterministic Finite Automaton (DFA) Given a string s, return whether s is a valid number or not LeetCode link: https://leetcode.com/problems/valid-number/description/

Attributes

state_machine

Classes

CharType

Create a collection of name/value pairs.

State

Create a collection of name/value pairs.

Functions

classify_char(→ CharType | None)

Classifies a character into one of the following categories:

is_valid_number(→ bool)

This function checks if the input string represents a valid number.

Module Contents

class strings.string_is_valid_number.CharType

Bases: enum.Enum

Create a collection of name/value pairs.

Example enumeration:

>>> class Color(Enum):
...     RED = 1
...     BLUE = 2
...     GREEN = 3

Access them by:

  • attribute access:

    >>> Color.RED
    <Color.RED: 1>
    
  • value lookup:

    >>> Color(1)
    <Color.RED: 1>
    
  • name lookup:

    >>> Color['RED']
    <Color.RED: 1>
    

Enumerations can be iterated over, and know how many members they have:

>>> len(Color)
3
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Methods can be added to enumerations, and members can have their own attributes – see the documentation for details.

DECIMAL = 'DECIMAL'
EXPONENT = 'EXPONENT'
NUMERIC = 'NUMERIC'
SIGN = 'SIGN'
class strings.string_is_valid_number.State

Bases: enum.Enum

Create a collection of name/value pairs.

Example enumeration:

>>> class Color(Enum):
...     RED = 1
...     BLUE = 2
...     GREEN = 3

Access them by:

  • attribute access:

    >>> Color.RED
    <Color.RED: 1>
    
  • value lookup:

    >>> Color(1)
    <Color.RED: 1>
    
  • name lookup:

    >>> Color['RED']
    <Color.RED: 1>
    

Enumerations can be iterated over, and know how many members they have:

>>> len(Color)
3
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Methods can be added to enumerations, and members can have their own attributes – see the documentation for details.

EXPONENTIAL = 'EXPONENTIAL'
EXP_NUMBER = 'EXP_NUMBER'
EXP_SIGN = 'EXP_SIGN'
FRACTION = 'FRACTION'
FRACTIONAL = 'FRACTIONAL'
INITIAL = 'INITIAL'
SIGNED = 'SIGNED'
WHOLE = 'WHOLE'
strings.string_is_valid_number.classify_char(char: str) CharType | None

Classifies a character into one of the following categories:

  • ‘CharType.NUMERIC’: if the character is a digit (0-9)

  • ‘CharType.SIGN’: if the character is a plus sign (+) or a minus sign (-)

  • ‘CharType.EXPONENT’: if the character is an ‘e’ or ‘E’

    (used in exponential notation)

  • ‘CharType.DECIMAL’: if the character is a decimal point (.)

  • None: if the character does not fit into any of the above categories

  • None: if size of char is not 1

Parameters: char (str): The character to be classified

Returns: CharType: The classification of the character

>>> classify_char('2')
<CharType.NUMERIC: 'NUMERIC'>
>>> classify_char('-')
<CharType.SIGN: 'SIGN'>
>>> classify_char('e')
<CharType.EXPONENT: 'EXPONENT'>
>>> classify_char('.')
<CharType.DECIMAL: 'DECIMAL'>
>>> classify_char('')
>>> classify_char('0')
<CharType.NUMERIC: 'NUMERIC'>
>>> classify_char('01')
strings.string_is_valid_number.is_valid_number(number_string: str) bool

This function checks if the input string represents a valid number. It uses a finite state machine to parse the input string, transitioning between states based on the character type. The function returns True if the input string represents a valid number, and False otherwise. A valid number is defined as a string that can be parsed into an integer, decimal, or exponent. >>> is_valid_number(“2”) True >>> is_valid_number(“0089”) True >>> is_valid_number(“-0.1”) True >>> is_valid_number(“+3.14”) True >>> is_valid_number(“4.”) True >>> is_valid_number(“-.9”) True >>> is_valid_number(“2e10”) True >>> is_valid_number(“-90E3”) True >>> is_valid_number(“3e+7”) True >>> is_valid_number(“+6e-1”) True >>> is_valid_number(“53.5e93”) True >>> is_valid_number(“-123.456e789”) True

>>> is_valid_number("abc")
False
>>> is_valid_number("1a")
False
>>> is_valid_number("1e")
False
>>> is_valid_number("e3")
False
>>> is_valid_number("99e2.5")
False
>>> is_valid_number("--6")
False
>>> is_valid_number("-+3")
False
>>> is_valid_number("95a54e53")
False
>>> is_valid_number(".")
False
strings.string_is_valid_number.state_machine: dict[State, dict[CharType, State]]