Thursday, February 17, 2022

# Randomly display 5 cards

# Cards stored in Google Drive under Resources

from tkinter import *

import random


win = Tk()

win.geometry("800x600")


def pick():

  txt.delete(1.0, END)

  txt.insert(END, '          PICKING 5 CARDS AT RANDOM\n\n')

  Keys = list(d.keys())

  random.shuffle(Keys)

  Chosen = Keys[:5]


  for i in range(5):

    txt.insert(END, str(Chosen[i]) + '\t' + str(d[Chosen[i]]) + '\n')

    stgImg = PhotoImage(file=str(Chosen[i]) + ".png")

    eval(("lbl") + str(i+1)).configure(image=stgImg)

    eval(("lbl") + str(i+1)).image = stgImg


d = {}

suites = ['Hearts', 'Spades', 'Diamonds', 'Clubs']

numbers = ['Ace'] + list(range(2, 11)) + ['Jack', 'Queen', 'King']

ctr = 1


for i in suites:

  for j in numbers:

    d[ctr] = str(j) + " of " + i

    ctr += 1


btn = Button(win, text='Pick 5 Cards', font=('calibri', 15), fg='green', bg='black', command=pick)

btn.place(x=40, y=10)


txt = Text(win, width=35, height=7, font=('Verdana', 16))

txt.place(x=200, y=10)


lbl1 = Label(win);  lbl1.place(x=130, y=400)

lbl2 = Label(win);  lbl2.place(x=230, y=400)

lbl3 = Label(win);  lbl3.place(x=330, y=400)

lbl4 = Label(win);  lbl4.place(x=430, y=400)

lbl5 = Label(win);  lbl5.place(x=530, y=400)


win.mainloop()


Tuesday, February 8, 2022

Detecting ARROW KEY and other NON-PRINTING KEY presses in Python IDLE

# pip install pynput


from pynput.keyboard import Key, Listener


def on_press(key):

  print('{0} pressed'.format(key))

  print(key)

  if key == Key.up:

    print("Up")

  elif key == Key.right:

    print("Right")

  elif key == Key.down:

    print("Down")

  elif key == Key.left:

    print("Left")


def on_release(key):

  print('{0} release'.format(key))

  if key == Key.esc:

    return False  # Stop listener


# Collect events until released

with Listener(on_press=on_press, on_release=on_release) as listener:

  listener.join()


Wednesday, February 2, 2022

Wordle in Python

# Bug: If word is AUGHT and AMAZE is entered, output is AMAZE, i.e., 'A' in 2 positions.

from clrprint import clrprint

import random

L = ['ABACK', 'ABAFT', 'ABOUT', 'ABOVE', 'ACUTE', 'ADIEU', 'ADIOS', 'ADMIT',

     'ADOPT', 'ADULT', 'AFOOT', 'AFORE', 'AFOUL', 'AFTER', 'AGAIN', 'AGAPE',

     'AGENT', 'AGREE', 'AHEAD', 'ALACK', 'ALIKE', 'ALIVE', 'ALLOW', 'ALOFT',

     'ALONE', 'ALONG', 'ALOOF', 'ALOUD', 'ALTER', 'AMISS', 'AMONG', 'AMPLY',

     'AMUCK', 'ANGER', 'ANGRY', 'APACE', 'APART', 'APPLE', 'APPLY', 'APTLY',

     'AREAR', 'ARGUE', 'ARISE', 'ASIDE', 'ASKEW', 'AUGHT', 'AVOID', 'AWARD',

     'AWARE', 'AWFUL', 'BADLY', 'BALLY', 'BASIC', 'BASIS', 'BEACH', 'BEGIN',

     'BELOW', 'BIRTH', 'BLACK', 'BLAME', 'BLESS', 'BLIND', 'BLOCK', 'BLOOD',

     'BOARD', 'BOTHE', 'BRAIN', 'BRAVE', 'BRAVO', 'BREAD', 'BREAK', 'BRIEF',

     'BRING', 'BROAD', 'BROWN', 'BUILD', 'BURST', 'BUYER', 'CANNY', 'CARRY',

     'CATCH', 'CAUSE', 'CHAIN', 'CHAIR', 'CHEAP', 'CHECK', 'CHEST', 'CHIEF',

     'CHILD', 'CHINA', 'CIRCA', 'CIVIL', 'CLAIM', 'CLASS', 'CLEAN', 'CLEAR',

     'CLIMB', 'CLOCK', 'CLOSE', 'COACH', 'COAST', 'COUNT', 'COURT', 'COVER',

     'COYLY', 'CRAZY', 'CREAM', 'CRIME', 'CROSS', 'CROWD', 'CROWN', 'CYCLE',

     'DAILY', 'DANCE', 'DEATH', 'DEPTH', 'DIMLY', 'DIRTY', 'DITTO', 'DOUBT',

     'DRAFT', 'DRAMA', 'DREAM', 'DRESS', 'DRINK', 'DRIVE', 'DRYLY', 'DULLY',

     'EARLY', 'EARTH', 'EMPTY', 'ENEMY', 'ENJOY', 'ENTER', 'ENTRY', 'EQUAL',

     'ERROR', 'EVENT', 'EXACT', 'EXIST', 'EXTRA', 'FAINT', 'FAITH', 'FALSE',

     'FATLY', 'FAULT', 'FIELD', 'FIFTH', 'FIGHT', 'FINAL', 'FIRST', 'FLOOR',

     'FOCUS', 'FORCE', 'FORTE', 'FORTH', 'FRAME', 'FRANK', 'FRESH', 'FRONT',

     'FRUIT', 'FUDGE', 'FULLY', 'FUNNY', 'GAILY', 'GIANT', 'GLASS', 'GODLY',

     'GOLLY', 'GRAND', 'GRANT', 'GRASS', 'GREAT', 'GREEN', 'GROSS', 'GROUP',

     'GUESS', 'GUIDE', 'HAPPY', 'HARSH', 'HAVOC', 'HEART', 'HEAVY', 'HELLA',

     'HELLO', 'HENCE', 'HENRY', 'HORSE', 'HOTEL', 'HOTLY', 'HOUSE', 'HOWDY',

     'HUMAN', 'ICILY', 'IDEAL', 'IMAGE', 'IMPLY', 'INDEX', 'INFRA', 'INNER',

     'INPUT', 'ISSUE', 'JAPAN', 'JOINT', 'JOLLY', 'JONES', 'JUDGE', 'KNIFE',

     'LARGE', 'LAUGH', 'LAYER', 'LEARN', 'LEAVE', 'LEGAL', 'LEVEL', 'LIGHT',

     'LIMIT', 'LOCAL', 'LOOSE', 'LOWLY', 'LUCKY', 'LUNCH', 'MADLY', 'MAGIC',

     'MAJOR', 'MARCH', 'MARRY', 'MATCH', 'MAYBE', 'MERCY', 'METAL', 'MINOR',

     'MINUS', 'MODEL', 'MONEY', 'MONTH', 'MORAL', 'MOTOR', 'MOUTH', 'MUSIC',

     'NAKED', 'NASTY', 'NAVAL', 'NEATH', 'NEVER', 'NEWLY', 'NIGHT', 'NOBLY',

     'NOISE', 'NORTH', 'NOVEL', 'NURSE', 'OCCUR', 'ODDLY', 'OFFER', 'OFTEN',

     'ORDER', 'OTHER', 'OUGHT', 'OUTER', 'OWNER', 'PANEL', 'PAPER', 'PARTY',

     'PEACE', 'PHASE', 'PHONE', 'PIANO', 'PIECE', 'PILOT', 'PITCH', 'PLACE',

     'PLAIN', 'PLANE', 'PLANT', 'PLATE', 'PLONK', 'PLUMB', 'POINT', 'POUND',

     'POWER', 'PRESS', 'PRICE', 'PRIDE', 'PRIME', 'PRIOR', 'PRIZE', 'PROOF',

     'PROUD', 'PROVE', 'QUEEN', 'QUEER', 'QUICK', 'QUIET', 'QUITE', 'RADIO',

     'RAISE', 'RANGE', 'RAPID', 'RATIO', 'REACH', 'READY', 'REFER', 'RELAX',

     'REPLY', 'RIGHT', 'RIVER', 'ROMAN', 'ROUGH', 'ROUND', 'ROUTE', 'ROYAL',

     'RUGBY', 'RURAL', 'SADLY', 'SALVE', 'SCALE', 'SCENE', 'SCOPE', 'SCORE',

     'SENSE', 'SERVE', 'SHALL', 'SHAPE', 'SHARE', 'SHARP', 'SHEEP', 'SHEER',

     'SHEET', 'SHIFT', 'SHIRT', 'SHOCK', 'SHOOT', 'SHORT', 'SHYLY', 'SIGHT',

     'SILLY', 'SINCE', 'SIXTH', 'SKILL', 'SLASH', 'SLEEK', 'SLEEP', 'SLYLY',

     'SMALL', 'SMART', 'SMILE', 'SMOKE', 'SNIFF', 'SOLID', 'SOLVE', 'SORRY',

     'SOUND', 'SOUTH', 'SPACE', 'SPARE', 'SPEAK', 'SPEED', 'SPEND', 'SPITE',

     'SPLIT', 'SPORT', 'SQUAD', 'STAFF', 'STAGE', 'STAND', 'STARK', 'START',

     'STATE', 'STEAM', 'STEEL', 'STEEP', 'STICK', 'STILL', 'STOCK', 'STONE',

     'STORE', 'STUDY', 'STUFF', 'STYLE', 'SUGAR', 'SUPER', 'SWEET', 'TABLE',

     'TALLY', 'TASTE', 'TEACH', 'TERRY', 'THANK', 'THEME', 'THERE', 'THICK',

     'THINE', 'THING', 'THINK', 'THIRD', 'THROW', 'TIGHT', 'TITLE', 'TODAY',

     'TOTAL', 'TOUCH', 'TOUGH', 'TOWER', 'TRACK', 'TRADE', 'TRAIN', 'TREAT',

     'TREND', 'TRIAL', 'TRULY', 'TRUST', 'TRUTH', 'TWICE', 'TWIRP', 'UNCLE',

     'UNDER', 'UNION', 'UNITY', 'UNTIL', 'UPPER', 'UPSET', 'URBAN', 'USUAL',

     'UTTER', 'VAGUE', 'VALID', 'VALUE', 'VIDEO', 'VIOLA', 'VISIT', 'VITAL',

     'VOICE', 'WASTE', 'WATCH', 'WATER', 'WETLY', 'WHERE', 'WHICH', 'WHILE',

     'WHIST', 'WHITE', 'WHOLE', 'WHOSE', 'WOMAN', 'WORLD', 'WORRY', 'WOULD',

     'WRITE', 'WRONG', 'WRYLY', 'YOUNG', 'YOURS', 'YOUTH']


word = "AUGHT"#random.choice(L)

ctr = 1


while ctr < 10:

  try:

    guess = input("Guess a 5 letter word: ").upper()

    for i in range(5):

      if guess[i] == word[i]:

        clrprint(guess[i], clr='g', end='')

      elif guess[i] in word:

        clrprint(guess[i], clr='b', end='')

      else:

        clrprint(guess[i], clr='r', end='')

    print()

  except: 

    clrprint("\nYour word must have exactly 5 letters", clr='r')

  

  if word == guess:

    print("CONGRATS!! Got it in", ctr, "tries.")

    break

  ctr += 1

else:

  print("SORRY!! The word was", word)