Skip to content

Instantly share code, notes, and snippets.

@snigdhasjg
Last active August 14, 2025 13:40
Show Gist options
  • Save snigdhasjg/2c19cb8a51784b985b93b7cc26ea236b to your computer and use it in GitHub Desktop.
Save snigdhasjg/2c19cb8a51784b985b93b7cc26ea236b to your computer and use it in GitHub Desktop.
Mac setup
# ~/.gitconfig
# Note:
# [Windows users] If you are on windows, please search for the word 'windows' - and fix those lines - they seem to cause some trouble
# [General] Since some of the settings are specific to my setup (ie presence of fles), I have marked those lines with comments 'Personal' - you can go ahead and change those to your equivalents or delete them altogether
# [General] Since I use 'diff-so-fancy' as the diffing tool, it's absence on your system will cause some errors. If you are able to, I would sincerely urge you to install and use it for a much better experience. If not, please replace all such occurrences back to use 'diff'
# Note: Even though this will show up twice in `git config -l` - it will still be overridden based on the order of the includeIf lines below
[user]
email = [email protected]
name = Snigdhajyoti Ghosh
signingkey = 76AEB954F18992D5D9F99A1850ADDBD47065F228
[commit]
gpgsign = true
[alias]
# find dangling commits
dangling = fsck --no-reflog
# edit global git configuration
ec = config --global -e
# find files/folders with the parameter as part of the name
f = "!git ls-files | GREP_OPTIONS=\"--color=auto\" grep -i"
# if a local commit exists, then amend it, else create a new commit with the specified message
sci = "!sh -c 'git status | GREP_OPTIONS=\"--color=auto\" grep \"is ahead of\"; \
if [ $? -eq 0 ]; then \
echo \"Amending existing commit\"; \
git amq; \
else \
echo \"Creating new commit\"; \
echo $0; \
git ci \"$0\"; \
fi'"
what = show -s --pretty='tformat:%h (%s, %ad)' --date=short
# show commit info summary (count and name)
who = shortlog -s --
# show username/email of the specified author
whois = log -i -1 --pretty=format:'%an <%ae>' --author
# show all commits in the past week done by the specified author
standup = log --since 1.week.ago --author
# show git log in colorful graph mode
lg = log --color --graph --pretty=format:'%C(yellow)%h%Creset -%C(bold blue)%d%Creset %s %C(green) %an, %cr%Creset' --abbrev-commit
l = log --decorate --graph --oneline --abbrev-commit
mn = merge --no-commit
cn = cherry-pick --no-commit
cr = cherry-pick
# commit with the following message
ci = commit -m
co = checkout
cl = clone
st = status
sts = status --short
b = branch
d = diff
dw = diff --word-diff
dc = diff --staged
dcw = diff --word-diff --staged
wipe = !git add -A && git commit -qm 'WIPE SAVEPOINT if needed later, can be resurrected using reflog' && git reset HEAD~1 --hard
amend = commit --amend
# amend last commit keeping the same commit comment
amq = commit --amend --no-edit --quiet
# unstage all staged changes
unstage = reset HEAD --
diff = diff --word-diff
grep = grep -Ii
patch = !git --no-pager diff --no-color
pend = !sh -c 'git log origin/"$1".."$1"' -
fo = fetch --all --tags
# print the current branch name
br = rev-parse --abbrev-ref HEAD
# rebase from corresponding upstream branch
upreb = !git rebase upstream/`git br`
# prune local copy-of-remote to remove deleted branches
rpo = remote prune origin
# show incoming change commits without per-file content changes
in = log --reverse ..@{u}
# show incoming change commits with per-file content changes
inp = log -p --reverse ..@{u}
# show incoming changes as a single diff (without breakup of commits)
inc = !git --no-pager diff ..@{u} | diff-so-fancy | less --tabs=1,5 -RFX
# show outgoing change commits
out = log --reverse @{u}..
# show outgoing change commits with content changes
outp = log -p --reverse @{u}..
g = grep --break --heading --line-number
sf = submodule foreach
# compress disk-space-usage by deleting dangling commits
# Note: Do not use '--all' switch for reflog expire - since that also destroys stashes
cc = "!du -sh .git; git remote prune origin; git repack ; git prune-packed; git reflog expire --expire=1.week.ago; git gc --aggressive --prune=now; du -sh .git;"
# show the biggest files in the disk (this is not technically specific to git-tracked files)
big = "!git rev-list --objects --all | GREP_OPTIONS=\"--color=auto\" grep \"$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -100 | awk '{print $1}')\""
# delete all local branches which are not present on remote
dlb = "!git branch -vv | GREP_OPTIONS= grep -v 'origin/' | awk '{print $1}' | xargs -I {} git branch -D {}; git branch -vv | GREP_OPTIONS= grep ': gone]' | awk '{print $1}' | xargs -I {} git branch -D {}"
# check if the specified branch has had a commit in the past 100 days and if so, report
# old = "!sh -c '[[ \"`git log $0/$1 --since 100.days -1 | wc -l`\" -eq 0 ]] && echo \"Will need to delete $0/$1\" && git push $0 --delete $1'"
old = "!sh -c '[[ \"`git log $0/$1 --since 100.days -1 | wc -l`\" -eq 0 ]] && echo \"Will need to delete $0/$1\"'"
# [siu = submodule init update] Runs submodule-initialisation and update after a fresh checkout RECURSIVE!
siu = "!git submodule update --init --recursive; git sf \"git siu\""
# push all submodules
pushsub = sf "git push"
# pull all submodules
pullsub = sf "git pull"
# show diffs with colored words (red word is deleted, green word is added)
dcolor = diff --color-words
[init]
defaultBranch = main
# templatedir = /Users/joe/.git-template
[core]
pager = diff-so-fancy | less --tabs=4 -RFX
# Trying out the competing product called 'delta' installed via 'homebrew'
# pager = delta
#editor = code --wait
editor = vi
autocrlf = input
excludesfile = ~/.gitignore
commentchar = *
# hooksPath = /dev/null
sshcommand = "ssh -i ~/.ssh/id_ed25519_git"
[branch]
autosetupmerge = true
autosetuprebase = always
[color]
ui = true
diff = auto
status = auto
branch = auto
interactive = auto
pager = true
# Trying out the competing product called 'delta' installed via 'homebrew'
# [delta]
# # plus-color = "#012800"
# # minus-color = "#340001"
# # syntax-theme = Monokai Extended
# line-numbers = true
# features = unobtrusive-line-numbers decorations
# # whitespace-error-style = 22 reverse
# [delta "unobtrusive-line-numbers"]
# line-numbers = true
# line-numbers-minus-style = "#444444"
# line-numbers-zero-style = "#444444"
# line-numbers-plus-style = "#444444"
# line-numbers-left-format = "{nm:>4}┊"
# line-numbers-right-format = "{np:>4}│"
# line-numbers-left-style = blue
# line-numbers-right-style = blue
# [delta "decorations"]
# commit-decoration-style = bold yellow box ul
# file-style = bold yellow ul
# file-decoration-style = none
# hunk-header-decoration-style = yellow box
[diff]
compactionHeuristic = true
[fetch]
prune = true
[gc]
pruneexpire = now
[grep]
extendedRegexp = true
lineNumber = true
fullName = true
[help]
autocorrect = 1
[merge]
defaultToUpstream = true
ff = only
renamelimit = 15000
# conflictstyle = diff3
[pager]
# log = diff-so-fancy | less --tabs=1,5 -RFX
show = diff-so-fancy | less --tabs=1,5 -RFX # windows
# Note: The '--pattern' switch sets some pre-search terms, but also scrolls to fill the whole console for single line change - which I dont like.
diff = diff-so-fancy | less --tabs=1,5 -RFX # --pattern '^(Date|added|deleted|modified): ' # windows
# diff = git-split-diffs --color | less -RFX
[interactive]
# diffFilter = (echo && diff-so-fancy)
# Trying out the competing product called 'delta' installed via 'homebrew'
# diffFilter = delta --color-only
[pack]
threads = 4
[push]
default = tracking
followTags = true
[pull]
rebase = true
autoStash = true
[rebase]
# autoSquash = true
autoStash = true
[stash]
untracked = true
[status]
showUntrackedFiles = all
# Convert to 'true' in case you work with submodules - but, will have visible perf slowdown on windows
submodulesummary = false
[submodule]
fetchJobs = 4
[tag]
sort = version:refname
[transfer]
fsckobjects = false
[color "diff"]
meta = yellow
frag = magenta bold
commit = yellow bold
old = red bold
new = green bold
whitespace = red reverse
[diff-so-fancy]
markEmptyLines = false
# changeHunkIndicators = false
# stripLeadingSymbols = false
# useUnicodeRuler = false
[rerere]
enabled = true
autoupdate = true
[advice]
detachedHead = true
[gui]
pruneduringfetch = true
matchtrackingbranch = true
warndetachedcommit = true
[checkout]
defaultRemote = origin
[includeIf "gitdir:~/IdeaProjects/client/"]
path = ~/IdeaProjects/client/.gitconfig
" ~/.vimrc
set nocompatible " be iMproved, required
" filetype off " required
" mouse navigation
set mouse-=a
" highlighting
" set relativenumber
set number
set ruler
syntax on
set background=dark
set cursorline
set incsearch
set hlsearch
set ignorecase
set smartcase
set showmatch
:highlight search guifg=yellow guibg=darkred
" tabbing
set expandtab
set smarttab
set smartindent
set shiftwidth=2
set tabstop=2
set softtabstop=2
" have command-line completion <Tab> (for filenames, help topics, option
" names) first list the available options and complete the longest common part,
" then have further <Tab>s cycle through the possibilities:
set wildmode=list:longest,full
" folding settings
set foldmethod=indent
set foldnestmax=10
set nofoldenable
set foldlevel=1
" All of your Plugins must be added before the following line
filetype plugin indent on " required
let g:solarized_termcolors=256
" Strip trailing whitespace
function! <SID>StripTrailingWhitespaces()
" Preparation: save last search, and cursor position.
let _s=@/
let l = line(".")
let c = col(".")
" Do the business:
%s/\s\+$//e
" Clean up: restore previous search history, and cursor position
let @/=_s
call cursor(l, c)
endfunction
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
# ZSH_THEME="powerlevel10k/powerlevel10k"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
## Homebrew setup
eval "$(/opt/homebrew/bin/brew shellenv)"
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
gradle
mvn
terraform
zsh-syntax-highlighting
zsh-autosuggestions
zsh-docker-aliases
aliases
kubectl
asdf
)
# Auto complition setup https://github.com/Homebrew/brew/blob/master/docs/Shell-Completion.md#configuring-completions-in-zsh
if type brew &>/dev/null
then
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
autoload -Uz compinit
compinit
fi
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
## p10k setup
[[ -f ${HOMEBREW_PREFIX}/share/powerlevel10k/powerlevel10k.zsh-theme ]] && . ${HOMEBREW_PREFIX}/share/powerlevel10k/powerlevel10k.zsh-theme
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ -f ~/.p10k.zsh ]] && . ~/.p10k.zsh
## Auto jump setup
[[ -f ${HOMEBREW_PREFIX}/etc/profile.d/autojump.sh ]] && . ${HOMEBREW_PREFIX}/etc/profile.d/autojump.sh
## aws cli setup
alias awsp="source _awsp"
alias awsr="source _awsr"
## .env setup
[[ $(command -v direnv) ]] && eval "$(direnv hook zsh)" && export DIRENV_LOG_FORMAT=
## Custom script so dont have to modify .zshrc
[[ -f ~/.zshrc.custom ]] && source ~/.zshrc.custom
## Setup anaconda
[[ -s ${HOMEBREW_PREFIX}/anaconda3/bin/conda ]] && eval "$(${HOMEBREW_PREFIX}/anaconda3/bin/conda "shell.$(basename "${SHELL}")" hook)"
## ASDF setup
[[ -s ${HOMEBREW_PREFIX}/opt/asdf/libexec/asdf.sh ]] && . ${HOMEBREW_PREFIX}/opt/asdf/libexec/asdf.sh
## bat setup
export BAT_THEME="gruvbox-dark"
## sdk man setup
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && . "$SDKMAN_DIR/bin/sdkman-init.sh"
# vim:syntax=zsh
# vim:filetype=zsh
gall() {
find . -type d -depth 1 -exec git --git-dir={}/.git --work-tree={} ${*} \;
}
fingerprint() {
COUNT=`grep pam_tid /etc/pam.d/sudo | wc -l`
if [[ $COUNT -gt 0 ]]; then
echo "ALREADY PRESENT - Not adding again!!!"
else
echo "INCLUDING NEW LINE!!!"
sudo sed -i '' '2i\
auth sufficient pam_tid.so\
' /etc/pam.d/sudo
fi
}
alias cst='colima start && echo "Please approve for creating softlink to /var/run/docker.sock" && sudo ln -sf ${HOME}/.colima/default/docker.sock /var/run/docker.sock'
alias cso='colima stop'
export TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE='/var/run/docker.sock'
# export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock"
alias ubuntu='docker run -h zshbuntu-sandbox --name zshbuntu -v zshbuntu-sandbox:/home/sandbox -v $(pwd):/home/sandbox/$(echo "${PWD#${HOME}/}") -w /home/sandbox/$(echo "${PWD#${HOME}/}") --rm -it macabrequinox/zshbuntu:1.0'
alias amazonlinux='docker run -h zshmazon-sandbox --name zshmazon -v zshmazon-sandbox:/home/sandbox -v $(pwd):/home/sandbox/$(echo "${PWD#${HOME}/}") -w /home/sandbox/$(echo "${PWD#${HOME}/}") --rm -it macabrequinox/zshmazon:1.0'
alias gitdot='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
tap "homebrew/bundle"
tap "homebrew/services"
tap "kreuzwerker/taps"
tap "norwoodj/tap"
tap "octopusdeploy/taps"
tap "oktadeveloper/tap"
tap "romkatv/powerlevel10k"
brew "git"
brew "asdf"
brew "autojump"
brew "awscli"
brew "azure-cli"
brew "bat"
brew "glib"
brew "pycparser"
brew "cffi"
brew "lima"
brew "colima"
brew "coreutils"
brew "diff-so-fancy"
brew "direnv"
brew "docker-completion"
brew "docker"
brew "docker-buildx"
brew "docker-compose"
brew "docker-credential-helper"
brew "docutils"
brew "eza"
brew "unbound"
brew "gnutls"
brew "harfbuzz"
brew "libass"
brew "pango"
brew "tesseract"
brew "ffmpeg"
brew "gh"
brew "git-lfs"
brew "helm"
brew "htop"
brew "icu4c@76"
brew "inframap"
brew "iperf"
brew "jq"
brew "k9s"
brew "kubernetes-cli"
brew "libpq"
brew "qemu"
brew "lima-additional-guestagents"
brew "minikube"
brew "nmap"
brew "powerlevel10k"
brew "sops"
brew "telnet"
brew "tig"
brew "tldr"
brew "watch"
brew "wget"
brew "yq"
brew "norwoodj/tap/helm-docs"
brew "octopusdeploy/taps/octopus-cli"
cask "1password"
cask "anaconda"
cask "android-file-transfer"
cask "android-platform-tools"
cask "brave-browser"
cask "cursor"
cask "dbeaver-community"
cask "discord"
cask "dropbox"
cask "figma"
cask "firefox@developer-edition"
cask "flycut"
cask "gcloud-cli"
cask "google-chrome@dev"
cask "gpg-suite-no-mail"
cask "intellij-idea"
cask "intellij-idea-ce"
cask "iterm2"
cask "keepassxc"
cask "keybase"
cask "postman"
cask "pycharm-ce"
cask "raspberry-pi-imager"
cask "rider"
cask "session-manager-plugin"
cask "slack"
cask "visual-studio-code"
cask "whatsapp"
cask "windows-app"
cask "zoom"
vscode "atommaterial.a-file-icon-vscode"
vscode "github.copilot"
vscode "github.copilot-chat"
vscode "github.vscode-github-actions"
vscode "hashicorp.terraform"
vscode "k--kato.intellij-idea-keybindings"
vscode "mechatroner.rainbow-csv"
vscode "ms-azuretools.vscode-containers"
vscode "ms-azuretools.vscode-docker"
vscode "ms-kubernetes-tools.vscode-kubernetes-tools"
vscode "ms-vscode-remote.remote-containers"
vscode "ms-vscode-remote.remote-ssh"
vscode "ms-vscode-remote.remote-ssh-edit"
vscode "ms-vscode.remote-explorer"
vscode "ms-vscode.remote-repositories"
vscode "redhat.vscode-yaml"
vscode "rooveterinaryinc.roo-cline"
vscode "seyyedkhandon.firacode"
vscode "vscjava.vscode-maven"
#!/opt/homebrew/anaconda3/envs/clean-env/bin/python
from random import randint
from tkinter import *
def database():
return {
"BOY": {
"height": [[49.8842, 1.8931],
[54.7244, 1.9465],
[58.4249, 2.0005],
[61.4292, 2.0444],
[63.886, 2.0808],
[65.9026, 2.1115],
[67.6236, 2.1403],
[69.1645, 2.1711],
[70.5994, 2.2055],
[71.9687, 2.2433],
[73.2812, 2.2849],
[74.5388, 2.3293],
[75.7488, 2.3762],
[76.9186, 2.426],
[78.0497, 2.4773],
[79.1458, 2.5303],
[80.2113, 2.5844],
[81.2487, 2.6406],
[82.2587, 2.6973],
[83.2418, 2.7553],
[84.1996, 2.814],
[85.1348, 2.8742],
[86.0477, 2.9342],
[86.941, 2.9951],
[87.8161, 3.0551],
[87.972, 3.116],
[88.8065, 3.1757],
[89.6197, 3.2353],
[90.412, 3.2928],
[91.1828, 3.3501],
[91.9327, 3.4052],
[92.6631, 3.4591],
[93.3753, 3.5118],
[94.0711, 3.5625],
[94.7532, 3.612],
[95.4236, 3.6604],
[96.0835, 3.7069],
[96.7337, 3.7523],
[97.3749, 3.7976],
[98.0073, 3.8409],
[98.631, 3.8831],
[99.2459, 3.9242],
[99.8515, 3.9651],
[100.4485, 4.0039],
[101.0374, 4.0435],
[101.6186, 4.081],
[102.1933, 4.1194],
[102.7625, 4.1567],
[103.3273, 4.1941],
[103.8886, 4.2314],
[104.4473, 4.2677],
[105.0041, 4.3052],
[105.5596, 4.3417],
[106.1138, 4.3783],
[106.6668, 4.4149],
[107.2188, 4.4517],
[107.7697, 4.4886],
[108.3198, 4.5245],
[108.8689, 4.5616],
[109.417, 4.5977],
[109.9638, 4.6339]],
"weight": [[3.3464, 0.14602],
[4.4709, 0.13395],
[5.5675, 0.12385],
[6.3762, 0.11727],
[7.0023, 0.11316],
[7.5105, 0.1108],
[7.934, 0.10958],
[8.297, 0.10902],
[8.6151, 0.10882],
[8.9014, 0.10881],
[9.1649, 0.10891],
[9.4122, 0.10906],
[9.6479, 0.10925],
[9.8749, 0.10949],
[10.0953, 0.10976],
[10.3108, 0.11007],
[10.5228, 0.11041],
[10.7319, 0.11079],
[10.9385, 0.11119],
[11.143, 0.11164],
[11.3462, 0.11211],
[11.5486, 0.11261],
[11.7504, 0.11314],
[11.9514, 0.11369],
[12.1515, 0.11426],
[12.3502, 0.11485],
[12.5466, 0.11544],
[12.7401, 0.11604],
[12.9303, 0.11664],
[13.1169, 0.11723],
[13.3, 0.11781],
[13.4798, 0.11839],
[13.6567, 0.11896],
[13.8309, 0.11953],
[14.0031, 0.12008],
[14.1736, 0.12062],
[14.3429, 0.12116],
[14.5113, 0.12168],
[14.6791, 0.1222],
[14.8466, 0.12271],
[15.014, 0.12322],
[15.1813, 0.12373],
[15.3486, 0.12425],
[15.5158, 0.12478],
[15.6828, 0.12531],
[15.8497, 0.12586],
[16.0163, 0.12643],
[16.1827, 0.127],
[16.3489, 0.12759],
[16.515, 0.12819],
[16.6811, 0.1288],
[16.8471, 0.12943],
[17.0132, 0.13005],
[17.1792, 0.13069],
[17.3452, 0.13133],
[17.5111, 0.13197],
[17.6768, 0.13261],
[17.8422, 0.13325],
[18.0073, 0.13389],
[18.1722, 0.13453],
[18.3366, 0.13517]]
},
"GIRL": {
"height": [[49.1477, 1.8627],
[53.6872, 1.9542],
[57.0673, 2.0362],
[59.8029, 2.1051],
[62.0899, 2.1645],
[64.0301, 2.2174],
[65.7311, 2.2664],
[67.2873, 2.3154],
[68.7498, 2.365],
[70.1435, 2.4157],
[71.4818, 2.4676],
[72.771, 2.5208],
[74.015, 2.575],
[75.2176, 2.6296],
[76.3817, 2.6841],
[77.5099, 2.7392],
[78.6055, 2.7944],
[79.671, 2.849],
[80.7079, 2.9039],
[81.7182, 2.9582],
[82.7036, 3.0129],
[83.6654, 3.0672],
[84.604, 3.1202],
[85.5202, 3.1737],
[86.4153, 3.2267],
[86.5904, 3.2783],
[87.4462, 3.33],
[88.283, 3.3812],
[89.1004, 3.4313],
[89.8991, 3.4809],
[90.6797, 3.5302],
[91.443, 3.5782],
[92.1906, 3.6259],
[92.9239, 3.6724],
[93.6444, 3.7186],
[94.3533, 3.7638],
[95.0515, 3.8078],
[95.7399, 3.8526],
[96.4187, 3.8963],
[97.0885, 3.9389],
[97.7493, 3.9813],
[98.4015, 4.0236],
[99.0448, 4.0658],
[99.6795, 4.1068],
[100.3058, 4.1476],
[100.9238, 4.1883],
[101.5337, 4.2279],
[102.136, 4.2683],
[102.7312, 4.3075],
[103.3197, 4.3456],
[103.9021, 4.3847],
[104.4786, 4.4226],
[105.0494, 4.4604],
[105.6148, 4.4981],
[106.1748, 4.5358],
[106.7295, 4.5734],
[107.2788, 4.6108],
[107.8227, 4.6472],
[108.3613, 4.6834],
[108.8948, 4.7195],
[109.4233, 4.7566]],
"weight": [[3.2322, 0.14171],
[4.1873, 0.13724],
[5.1282, 0.13],
[5.8458, 0.12619],
[6.4237, 0.12402],
[6.8985, 0.12274],
[7.297, 0.12204],
[7.6422, 0.12178],
[7.9487, 0.12181],
[8.2254, 0.12199],
[8.48, 0.12223],
[8.7192, 0.12247],
[8.9481, 0.12268],
[9.1699, 0.12283],
[9.387, 0.12294],
[9.6008, 0.12299],
[9.8124, 0.12303],
[10.0226, 0.12306],
[10.2315, 0.12309],
[10.4393, 0.12315],
[10.6464, 0.12323],
[10.8534, 0.12335],
[11.0608, 0.1235],
[11.2688, 0.12369],
[11.4775, 0.1239],
[11.6864, 0.12414],
[11.8947, 0.12441],
[12.1015, 0.12472],
[12.3059, 0.12506],
[12.5073, 0.12545],
[12.7055, 0.12587],
[12.9006, 0.12633],
[13.093, 0.12683],
[13.2837, 0.12737],
[13.4731, 0.12794],
[13.6618, 0.12855],
[13.8503, 0.12919],
[14.0385, 0.12988],
[14.2265, 0.13059],
[14.414, 0.13135],
[14.601, 0.13213],
[14.7873, 0.13293],
[14.9727, 0.13376],
[15.1573, 0.1346],
[15.341, 0.13545],
[15.524, 0.1363],
[15.7064, 0.13716],
[15.8882, 0.138],
[16.0697, 0.13884],
[16.2511, 0.13968],
[16.4322, 0.14051],
[16.6133, 0.14132],
[16.7942, 0.14213],
[16.9748, 0.14293],
[17.1551, 0.14371],
[17.3347, 0.14448],
[17.5136, 0.14525],
[17.6916, 0.146],
[17.8686, 0.14675],
[18.0445, 0.14748],
[18.2193, 0.14821]]
}
}
def take_input():
data = database()
gui = Tk()
gui.geometry("600x300")
gui.title("WHO ideal height and weight finder")
gender_label = Label(gui, text="Gender: ", width=20, font=("bold", 15))
gender_label.grid(row=0, columnspan=5, ipadx=2)
gender = StringVar(gui, "BOY")
gender_menu = OptionMenu(gui, gender, "BOY", "GIRL")
gender_menu.grid(row=0, column=7)
age = IntVar(gui)
age_year = IntVar(gui)
age_month = IntVar(gui)
random_height = DoubleVar(gui)
random_weight = DoubleVar(gui)
def clear():
age.set("")
age_year.set("")
age_month.set("")
random_height.set("")
random_weight.set("")
clear()
age_label = Label(gui, text="Age: ", width=20, font=("bold", 15))
age_label.grid(row=1, columnspan=5, ipadx=2)
age_field = Message(gui, textvariable=age)
age_field.grid(row=1, column=7)
age_year_label = Label(gui, text="Year: ", width=20, font=("bold", 15))
age_year_label.grid(row=2, columnspan=5, ipadx=2)
age_year_entry = Entry(gui, textvariable=age_year)
age_year_entry.grid(row=2, column=7)
age_month_label = Label(gui, text="Month: ", width=20, font=("bold", 15))
age_month_label.grid(row=3, columnspan=5, ipadx=2)
age_month_entry = Entry(gui, textvariable=age_month)
age_month_entry.grid(row=3, column=7)
def random():
age.set(age_year.get() * 12 + age_month.get())
gender_data = data.get(gender.get())
height_mean = gender_data.get("height")[age.get()][0]
height_std = gender_data.get("height")[age.get()][1]
random_height.set(round(height_mean + (randint(-100, 100) * height_std / 100), 2))
weight_mean = gender_data.get("weight")[age.get()][0]
weight_std = gender_data.get("weight")[age.get()][1]
random_weight.set(round(weight_mean + (randint(-100, 100) * weight_std / 100), 2))
random_button = Button(gui, text='Random', fg='black', bg='red', command=random, height=1, width=7)
random_button.grid(row=4, column=7)
clear_button = Button(gui, text='(X)', fg='black', bg='red', command=clear, height=1, width=7)
clear_button.grid(row=4, column=3)
random_height_label = Label(gui, text="Height: ", width=20, font=("bold", 15))
random_height_label.grid(row=6, columnspan=4, ipadx=2)
random_height_field = Message(gui, textvariable=random_height)
random_height_field.grid(row=6, column=6, columnspan=2)
random_weight_label = Label(gui, text="Weight: ", width=20, font=("bold", 15))
random_weight_label.grid(row=7, columnspan=4, ipadx=2)
random_weight_field = Message(gui, textvariable=random_weight)
random_weight_field.grid(row=7, column=6, columnspan=2)
mainloop()
if __name__ == '__main__':
take_input()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment