slogan3

Creëer een interactieve Python CLI-tool voor specifieke doeleinden

description

Met deze prompt kun je een gebruiksvriendelijke Python CLI-tool maken waarmee je eenvoudig specifieke taken uitvoert. De prompt richt zich op interactie en foutafhandeling, wat bijdraagt aan robuuste en toegankelijke scripts, anders dan standaard scriptontwikkeling of automatisering. Dit lost problemen op bij het bouwen van command line applicaties die gebruikers effectief begeleiden.

prompt

Help me een interactieve command line interface (CLI) tool te schrijven in Python waarmee gebruikers <beschrijf h ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een eenvoudige maar interactieve command line interface (CLI) tool in Python waarmee gebruikers taken kunnen beheren en bijhouden. De tool ondersteunt het toevoegen, bekijken, voltooien en verwijderen van taken, met gebruikersinvoer, foutafhandeling en duidelijke instructies. ```python import sys # Lijst om taken op te slaan taken = [] def toon_instructies(): print("\nWelkom bij de Takenbeheer CLI!") print("Kies een optie:") print("1. Taak toevoegen") print("2. Taken bekijken") print("3. Taak voltooien") print("4. Taak verwijderen") print("5. Afsluiten\n") def taak_toevoegen(): taak = input("Voer de taak in: ").strip() if taak: taken.append({"omschrijving": taak, "voltooid": False}) print(f"Taak '{taak}' toegevoegd.") else: print("Ongeldige invoer. Probeer het opnieuw.") def taken_bekijken(): if not taken: print("Geen taken gevonden.") return print("\nLijst van taken:") for idx, taak in enumerate(taken, start=1): status = "Voltooid" if taak["voltooid"] else "Niet voltooid" print(f"{idx}. {taak['omschrijving']} [{status}]") print() def taak_voltooien(): try: index = int(input("Voer het nummer van de te voltooien taak in: ")) if 1 <= index <= len(taken): if not taken[index - 1]["voltooid"]: taken[index - 1]["voltooid"] = True print(f"Taak '{taken[index - 1]['omschrijving']}' gemarkeerd als voltooid.") else: print("Deze taak is al voltooid.") else: print("Ongeldig nummer. Probeer het opnieuw.") except ValueError: print("Ongeldige invoer. Voer een numerieke waarde in.") def taak_verwijderen(): try: index = int(input("Voer het nummer van de te verwijderen taak in: ")) if 1 <= index <= len(taken): verwijderde_taak = taken.pop(index - 1) print(f"Taak '{verwijderde_taak['omschrijving']}' verwijderd.") else: print("Ongeldig nummer. Probeer het opnieuw.") except ValueError: print("Ongeldige invoer. Voer een numerieke waarde in.") def main(): toon_instructies() while True: keuze = input("Maak uw keuze (1-5): ").strip() if keuze == '1': taak_toevoegen() elif keuze == '2': taken_bekijken() elif keuze == '3': taak_voltooien() elif keuze == '4': taak_verwijderen() elif keuze == '5': print("Afsluiten. Tot ziens!") sys.exit() else: print("Ongeldige keuze. Probeer het opnieuw.") # Optioneel: toon opnieuw de instructies toon_instructies() if __name__ == "__main__": main() ``` **Hoe werkt deze tool?** - Bij het starten zie je instructies met opties. - Je kunt taken toevoegen, bekijken, voltooien of verwijderen. - De invoer wordt gecontroleerd op geldigheid. - Bij ongeldige invoer krijg je een foutmelding en wordt je gevraagd opnieuw te proberen. - De tool blijft draaien totdat je kiest voor afsluiten. Je kunt deze code opslaan in een bestand, bijvoorbeeld `taken_cli.py`, en uitvoeren met `python taken_cli.py`.
provider: deepseek
model: deepseek-chat
Hier is een interactieve CLI-taakmanager in Python met uitgebreide functionaliteit: ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import os from datetime import datetime class TaakManager: def __init__(self, bestandsnaam="taken.json"): self.bestandsnaam = bestandsnaam self.taken = self._laad_taken() def _laad_taken(self): """Laad taken uit JSON-bestand of retourneer lege lijst als bestand niet bestaat""" try: if os.path.exists(self.bestandsnaam): with open(self.bestandsnaam, 'r', encoding='utf-8') as f: return json.load(f) return [] except (json.JSONDecodeError, IOError) as e: print(f"Fout bij laden van taken: {e}") return [] def _sla_taken_op(self): """Sla taken op in JSON-bestand""" try: with open(self.bestandsnaam, 'w', encoding='utf-8') as f: json.dump(self.taken, f, indent=2, ensure_ascii=False) except IOError as e: print(f"Fout bij opslaan van taken: {e}") def toon_menu(self): """Toon het hoofdmenu""" print("\n" + "="*50) print("TAKMANAGER - JOUW PERSOONLIJKE TAKENBEHEER") print("="*50) print("1. Toon alle taken") print("2. Voeg nieuwe taak toe") print("3. Markeer taak als voltooid") print("4. Verwijder taak") print("5. Zoek taken") print("6. Statistieken") print("7. Exit") print("-"*50) def toon_taken(self, taken_lijst=None): """Toon alle taken of een gefilterde lijst""" taken = taken_lijst if taken_lijst else self.taken if not taken: print("\nGeen taken gevonden!") return print(f"\n{'ID':<4} {'Status':<12} {'Taak':<30} {'Datum toegevoegd':<20}") print("-"*70) for i, taak in enumerate(taken, 1): status = "✓ VOLTOOID" if taak['voltooid'] else "✗ PENDING" print(f"{i:<4} {status:<12} {taak['beschrijving']:<30} {taak['datum']:<20}") def voeg_taak_toe(self): """Voeg een nieuwe taak toe""" try: beschrijving = input("\nVoer taakbeschrijving in: ").strip() if not beschrijving: print("Taakbeschrijving mag niet leeg zijn!") return nieuwe_taak = { 'id': len(self.taken) + 1, 'beschrijving': beschrijving, 'voltooid': False, 'datum': datetime.now().strftime("%Y-%m-%d %H:%M") } self.taken.append(nieuwe_taak) self._sla_taken_op() print(f"Taak '{beschrijving}' succesvol toegevoegd!") except KeyboardInterrupt: print("\nOperatie geannuleerd.") except Exception as e: print(f"Fout bij toevoegen taak: {e}") def markeer_voltooid(self): """Markeer een taak als voltooid""" try: self.toon_taken() if not self.taken: return taak_id = input("\nVoer ID in van te voltooien taak: ").strip() if not taak_id.isdigit(): print("Voer een geldig nummer in!") return taak_id = int(taak_id) - 1 if 0 <= taak_id < len(self.taken): if not self.taken[taak_id]['voltooid']: self.taken[taak_id]['voltooid'] = True self.taken[taak_id]['voltooid_datum'] = datetime.now().strftime("%Y-%m-%d %H:%M") self._sla_taken_op() print(f"Taak '{self.taken[taak_id]['beschrijving']}' gemarkeerd als voltooid!") else: print("Deze taak is al voltooid!") else: print("Ongeldig ID!") except (ValueError, IndexError): print("Ongeldige invoer!") except KeyboardInterrupt: print("\nOperatie geannuleerd.") def verwijder_taak(self): """Verwijder een taak""" try: self.toon_taken() if not self.taken: return taak_id = input("\nVoer ID in van te verwijderen taak: ").strip() if not taak_id.isdigit(): print("Voer een geldig nummer in!") return taak_id = int(taak_id) - 1 if 0 <= taak_id < len(self.taken): verwijderde_taak = self.taken.pop(taak_id) # Update IDs for i, taak in enumerate(self.taken): taak['id'] = i + 1 self._sla_taken_op() print(f"Taak '{verwijderde_taak['beschrijving']}' verwijderd!") else: print("Ongeldig ID!") except (ValueError, IndexError): print("Ongeldige invoer!") except KeyboardInterrupt: print("\nOperatie geannuleerd.") def zoek_taken(self): """Zoek taken op trefwoord""" try: zoekterm = input("\nVoer zoekterm in: ").strip().lower() if not zoekterm: print("Zoekterm mag niet leeg zijn!") return gevonden_taken = [ taak for taak in self.taken if zoekterm in taak['beschrijving'].lower() ] if gevonden_taken: print(f"\nGevonden {len(gevonden_taken)} taak(en) met '{zoekterm}':") self.toon_taken(gevonden_taken) else: print(f"Geen taken gevonden met '{zoekterm}'") except KeyboardInterrupt: print("\nZoekopdracht geannuleerd.") def toon_statistieken(self): """Toon statistieken over taken""" totaal = len(self.taken) voltooid = sum(1 for taak in self.taken if taak['voltooid']) pending = totaal - voltooid print("\n" + "="*30) print("STATISTIEKEN") print("="*30) print(f"Totaal aantal taken: {totaal}") print(f"Voltooide taken: {voltooid}") print(f"Pending taken: {pending}") if totaal > 0: percentage = (voltooid / totaal) * 100 print(f"Voortgang: {percentage:.1f}%") print("="*30) def run(self): """Hoofdprogramma loop""" print("Welkom bij de TaakManager CLI!") print("Typ 'help' voor instructies of 'menu' om het menu te tonen.") while True: try: commando = input("\nVoer een commando in (of 'menu' voor opties): ").strip().lower() if commando in ['1', 'toon', 'taken']: self.toon_taken() elif commando in ['2', 'voeg toe', 'nieuw']: self.voeg_taak_toe() elif commando in ['3', 'voltooid', 'markeer']: self.markeer_voltooid() elif commando in ['4', 'verwijder', 'delete']: self.verwijder_taak() elif commando in ['5', 'zoek', 'search']: self.zoek_taken() elif commando in ['6', 'stats', 'statistieken']: self.toon_statistieken() elif commando in ['7', 'exit', 'quit', 'afsluiten']: print("Bedankt voor het gebruiken van TaakManager. Tot ziens!") break elif commando in ['menu', 'help', '?']: self.toon_menu() elif commando == '': continue else: print("Onbekend commando. Typ 'menu' voor beschikbare opties.") except KeyboardInterrupt: print("\n\nProgramma afgesloten.") break except Exception as e: print(f"Er is een onverwachte fout opgetreden: {e}") def main(): """Hoofdfunctie om de applicatie te starten""" try: manager = TaakManager() manager.toon_menu() manager.run() except Exception as e: print(f"Fout bij opstarten applicatie: {e}") if __name__ == "__main__": main() ``` ## Gebruiksaanwijzing: ### Installatie: ```bash # Sla de code op als taakmanager.py python3 taakmanager.py ``` ### Functionaliteiten: 1. **Toon alle taken** - Bekijk je complete takenlijst 2. **Nieuwe taak toevoegen** - Voeg taken toe met beschrijving 3. **Markeer als voltooid** - Update de status van taken 4. **Verwijder taak** - Verwijder taken uit de lijst 5. **Zoek functie** - Zoek taken op trefwoord 6. **Statistieken** - Zie je voortgang in percentages 7. **Automatisch opslaan** - Taken worden opgeslagen in JSON-formaat ### Gebruik: - Typ het cijfer van de optie of het commando (bijv. '1' of 'toon') - Gebruik 'menu' om het hoofdmenu te tonen - Gebruik Ctrl+C om te annuleren of af te sluiten ### Foutafhandeling: - Ongeldige invoer wordt netjes afgehandeld - Bestandsoperaties hebben try-catch blokken - Keyboard interrupt wordt correct verwerkt - Lege invoer wordt voorkomen De applicatie slaat taken automatisch op in een `taken.json` bestand en laadt ze bij opstarten weer in!