# Built-in String Constants
# string module — letters, digits, punctuation ready to use
# redhorndev.com

import string
import random

# ─────────────────────────────────────────────
# The constants
# ─────────────────────────────────────────────

print(string.ascii_lowercase)
# abcdefghijklmnopqrstuvwxyz

print(string.ascii_uppercase)
# ABCDEFGHIJKLMNOPQRSTUVWXYZ

print(string.ascii_letters)
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

print(string.digits)
# 0123456789

print(string.punctuation)
# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

# these are strings — no parentheses, not functions

# ─────────────────────────────────────────────
# Check membership
# ─────────────────────────────────────────────

char = "R"
print(char in string.ascii_letters)     # True
print(char in string.digits)            # False
print(char in string.ascii_uppercase)   # True
print(char in string.ascii_lowercase)   # False

# ─────────────────────────────────────────────
# Generate a random password
# ─────────────────────────────────────────────

alphabet = string.ascii_letters + string.digits
password = "".join(random.choice(alphabet) for _ in range(12))
print(password)     # e.g. Xk9mT2rBqL4n

# stronger — add punctuation
alphabet_full = string.ascii_letters + string.digits + string.punctuation
password_strong = "".join(random.choice(alphabet_full) for _ in range(16))
print(password_strong)

# ─────────────────────────────────────────────
# Validate input
# ─────────────────────────────────────────────

name = "Raven"
mixed = "Raven123"

print(all(ch in string.ascii_letters for ch in name))   # True
print(all(ch in string.ascii_letters for ch in mixed))  # False

# only digits
code = "4471"
print(all(ch in string.digits for ch in code))          # True

# ─────────────────────────────────────────────
# Remove punctuation
# ─────────────────────────────────────────────

text = "Hello, World! How's it going?"
clean = "".join(ch for ch in text if ch not in string.punctuation)
print(clean)    # Hello World Hows it going

# ─────────────────────────────────────────────
# Quick reference
# ─────────────────────────────────────────────

# import string
#
# string.ascii_lowercase    — abcdefghijklmnopqrstuvwxyz
# string.ascii_uppercase    — ABCDEFGHIJKLMNOPQRSTUVWXYZ
# string.ascii_letters      — all letters (lower + upper)
# string.digits             — 0123456789
# string.punctuation        — all punctuation characters
# string.whitespace         — space, tab, newline, etc.
#
# these are strings — use with in, loops, join, random.choice()
# ASCII only — no accented characters
