A simple input while loop utility
Project description
inputwhile
A simple but helpful package that allows you to create input while loops with different conditions.
Explanation nobody cares about
Once, I was tired of writing:
value = input()
while not condition(value):
value = input()
every time I wanted to check if a user entered the right value in a program.
So, I decided to make this package (my first one). It has a bunch of functions with pre-defined condition functions, but you can make custom inputwhiles too.
Installation
# Linux/macOS
python3 -m pip install inputwhile
# Windows
py -3 -m pip install inputwhile
Quick examples
Custom error messages
import inputwhile
# If input value is an empty string it will print "Enter your username:" again until input value is not empty
string = inputwhile.stringNotEmpty(
"Enter your username:"
)
# If input value is an empty string it will print "You can't leave it empty. Please enter your username:" until input value is not empty.
string = inputwhile.stringNotEmpty(
"Enter your username:",
error_prompt="You can't leave it empty. Please enter your username:"
)
# error_prompt is optional, but is also in all package functions.
Number inputwhiles
import inputwhile
integer = inputwhile.integer(
"Enter a number:",
error_prompt="Invalid number. Please enter a valid number:"
)
floatNumber = inputwhile.floatInput(
"Enter a float:",
min=0.0,
max=1.0 # You can add ranges too.
)
Custom types
import inputwhile
from myproject import BigInt
# Will request a value until it is parsable like: BigInt(value) and will return it with that type.
value = inputwhile.customTypeClass(
"Enter the nuclear code:",
typeClass=BigInt
)
Boolean inputwhiles
import inputwhile
# Only matches "true" or "false"
boolean = inputwhile.boolean(
"It is illegal to keep a guinea pig in Switzerland. True or false?:",
"Prompt not recognized. Please enter 'true' or 'false':"
)
# Matches "true", "t", "yes", "y", "1", "si", "sí", "s" or "false", "f", "no", "n", "0", "nope" by default.
flexibleBoolean = inputwhile.booleanFlexible(
"Do you want to continue? (y/n):",
trueStrings={"continue"},
falseStrings={"exit"},
doUseCustomNDefaults=True # Makes trueStrings and falseStrings being added to the default ones instead of replacing them.
)
regexBoolean = inputwhile.booleanFlexibleRegex(
"Do you like tacos?:",
trueRegex=f"^(yes|true|you don't have an idea|definitely|yes,[\s]*[\w]+)$"
falseRegex=f"^(no|definitely no|never|no,[\s]*[\w]+)$"
error_prompt="Prompt not recognized. Try again:"
)
Lists
import inputwhile
# List of strings
stringsList = inputwhile.listInput(
"Enter the countries you have ever visited:",
separator=",",
error_prompt="Please, don't leave empty the input:",
doStriptElements=True # Makes a element.strip() to every element in the list
)
# Can filter the list
from pathlib import Path
filteredList = inputwhile.listInput(
"Enter the directories you want to scan:",
separator=" ",
error_prompt="Invalid directories. Please enter at least one directory:"
filter_func=lambda x: Path(x).is_dir()
)
# Can map too
mappedList = inputwhile.listInput(
"Enter the values of the Mexican peso per day in the last month:"
error_prompt="Enter at least one value:"
map_func=lambda x: int(x),
filter_func=lambda x: inputwhile.utils.isParsable(x, int)
)
# Also sets available for unique values
setsToo = setInput(
"Enter your social media urls:",
separator=" ",
error_prompt="Enter at least one url:"
filter_func=lambda x: x.startswith("http")
)
# And of course regex
regexList = inputwhile.listRegex(
"Enter your hobbies separated by commas:",
regex_separator=r"[,]+",
doStripElements=True
)
regexSet = inputwhile.setRegex(
"Enter the file extensions you like the most:"
regex_separator=r"[.,\s]+"
)
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file inputwhile-1.1.0.tar.gz.
File metadata
- Download URL: inputwhile-1.1.0.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ac88fb6f72befbb87a638785a8ed6bd8420eb1697991b51dfb2d54fd646f5bf
|
|
| MD5 |
068d9e4c57e6b9436c575461571a91ad
|
|
| BLAKE2b-256 |
bb370d7e69b1c85dd03294e6f6bbb07462f0a9d5840aec976122aade879749b1
|
File details
Details for the file inputwhile-1.1.0-py3-none-any.whl.
File metadata
- Download URL: inputwhile-1.1.0-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64c27334f7e1a3a645b899dbe768a6ed298d8727d78d4cb0a242c4e50316dc70
|
|
| MD5 |
7a242a0c64453562289d43463e2028c4
|
|
| BLAKE2b-256 |
e402e600c2da013fcbf0f8bc75492c06d37d17d8c9c1434ae780d4de365b2ab2
|