# Variables and Data Types
This notebook will cover the basic concepts of variables and data types in Python.
## Basic Types
### Numbers
Python has three main number types we'll look at here: integers (`int`), floating-point numbers (`float`), and complex numbers (`complex`).
### Strings
Strings (`str`) are sequences of characters, enclosed in single or double quotes.
### Booleans
Booleans (`bool`) represent one of two values: `True` or `False`.
### NoneType
The `NoneType` has a single value, `None`, used to signify the absence of a value.
## Working with Variables
### Assignment and Reassignment
You can assign a value to a variable using the equals sign (`=`). You can also reassign a new value to an existing variable.
### Naming Conventions
- Variable names should be lowercase, with words separated by underscores (snake_case).
- They must start with a letter or an underscore, followed by letters, numbers, or underscores.
### Type Inference
Python infers the data type of a variable from the value assigned to it. You don't need to declare the type explicitly.
### Dynamic Typing
Because of type inference, a variable can hold values of different types at different times. This is known as dynamic typing.
### Type Casting
You can convert variables from one type to another using type casting functions like `int()`, `float()`, and `str()`.
### Formatted Strings (f-strings)
F-strings provide a concise and convenient way to embed expressions inside string literals for formatting. You prefix a string with the letter 'f' and write expressions in `{}`.