$lang['tuto'] = "opplæringsprogrammer"; ?> %: 'Matte' og 'tuple' i et gjettespill: Ustøttede

%: 'Matte' og 'tuple' i et gjettespill: Ustøttede operandtyper: Slik fikser du det

%: 'Matte' og 'tuple' i et gjettespill: Ustøttede operandtyper: Slik fikser du det
Guessing

Vanlig Python-feil når du bygger et interaktivt gjettespill

Når du lærer Python, er et av de mest spennende prosjektene å bygge interaktive spill som et gjettespill. Slike prosjekter hjelper deg å forstå hvordan Python samhandler med brukerinndata og bruker kontrollflyt for å veilede programmets oppførsel. I dette tilfellet er målet å få Python til å be brukeren om å gjette et tall mellom 1 og 100, gi tilbakemelding for å gjette høyere eller lavere, og til slutt bekrefte når riktig gjetning er gjort.

Men som med mange programmeringsøvelser kan det oppstå feil som ikke er umiddelbart klare. En feil du kan støte på når du følger en Python-opplæring, som den du jobber med, er operandtypen(e) som ikke støttes for %: 'Math' og 'tuple'. Dette kan være frustrerende, spesielt når syntaksen virker riktig ved første øyekast.

I dette gjettespillet skjer feilen du står overfor vanligvis når du prøver å formatere en streng feil mens du bruker funksjon i bibliotek. Dette er en vanlig feil, men løsningen er grei når den først er identifisert.

Denne veiledningen vil lede deg gjennom hva feilen betyr, hvorfor den oppstår, og hvordan du kan endre Python-koden for å fikse den. Mot slutten vil du ha et fullt fungerende gjettespill uten den forvirrende feilmeldingen!

Kommando Eksempel på bruk
random.randint() Denne funksjonen fra bibliotek genererer et tilfeldig heltall innenfor et spesifisert område. I gjettespillet brukes det til å generere et tilfeldig tall mellom 1 og 100 for brukeren å gjette. Eksempel: random.randint(1, 100).
IPython.display.Math() Denne kommandoen fra modulen brukes til å vise matematiske uttrykk på en formatert måte. I løsningen hjelper det å formatere utdataene for å vise riktig nummer og brukerens gjetning. Eksempel: Math(f'Gratulerer! Riktig tall var {a}').
unittest.mock.patch() Denne funksjonen brukes til å erstatte en funksjon eller et objekt i koden din med en falsk versjon under testing. Det er spesielt nyttig i enhetstester for å simulere brukerinndata uten manuell interaksjon. Eksempel: @patch('builtins.input', side_effect=[50, 75, 85, 95, 100]).
unittest.TestCase En grunnklasse i modul som brukes til å lage enhetstester. Det gir et rammeverk for å teste individuelle funksjoner for å sikre at de oppfører seg som forventet. Eksempel: klasse TestGuessingGame(unittest.TestCase).
continue Denne kontrollflytkommandoen brukes i looper for å hoppe over gjeldende iterasjon og gå videre til neste. I skriptet sikrer det at programmet fortsetter etter å ha fanget en ValueError på grunn av ugyldig inndata. Eksempel: fortsett.
try-except Denne strukturen brukes til feilhåndtering, og lar programmet fortsette å kjøre selv når et unntak oppstår. I gjettespillet håndterer det ugyldig inndata fra brukere som ikke angir heltall. Eksempel: prøv: ... unntatt ValueError:.
input() Denne funksjonen fanger opp brukerinndata som en streng. I gjettespillet brukes det til å be brukeren om å legge inn gjetningen sin. Inndata blir senere konvertert til et heltall. Eksempel: user_guess = int(input('Gjett et tall mellom 1 og 100: ')).
f-string Introdusert i Python 3.6, tillate enklere strengformatering ved å legge inn uttrykk direkte i strengen. I løsningen brukes de til å formatere utdata for den endelige meldingen. Eksempel: f'Gratulerer! Det riktige tallet var {a}'.
unittest.main() Denne kommandoen kjører testpakken i Python's rammeverk. Den brukes til automatisk å oppdage og kjøre testene som er skrevet for programmet. Eksempel: hvis __navn__ == '__main__': unittest.main().

Forstå mekanikken bak Pythons gjettespillkode

Python gjettespillskriptet er utformet for å tillate brukeren å gjette et tilfeldig generert tall mellom 1 og 100. Det første viktige elementet i dette programmet er bruken av funksjon, som genererer et tilfeldig heltall innenfor det angitte området (1 til 100). Dette danner kjernelogikken bak spillet, da det gir det hemmelige nummeret som brukeren må gjette. Programmet ber deretter brukeren om å legge inn sin gjetning ved å bruke funksjon, som fanger opp brukerinndata som en streng og senere konverteres til et heltall for sammenligningsformål.

Løkkestrukturen spiller en avgjørende rolle for å kontrollere spillets flyt. EN loop brukes til å kontinuerlig sjekke brukerens gjetninger mot det tilfeldig genererte tallet. Så lenge brukerens gjetning er feil, fortsetter loopen å be spilleren om å enten "Gjett høyere" eller "Gjett lavere." Tilstanden inne i loopen sammenligner brukerens gjetning med det hemmelige nummeret, og sikrer at spillet gir passende tilbakemeldinger uten å avslutte for tidlig. Ved å håndtere brukerinnspill på denne måten, blir spillet interaktivt, og veileder spilleren mot riktig svar.

I det andre skriptet bruker , introduserer vi et mer sofistikert utdataformat med , en funksjon som brukes til å vise meldinger i matematisk notasjon. Den første bruken av prosentsymbolet (%) for å formatere meldingen med flere variabler forårsaket imidlertid en feil: ustøttede operandtyper for %: 'Matematisk' og 'tuppel'. Denne feilen oppstår pga støtter ikke denne formen for strenginterpolasjon. I stedet, bruk av Pythons moderne f-streng-formatering, som er mer intuitiv, løser dette problemet og viser en riktig formatert melding på slutten av spillet når brukeren gjetter riktig.

I tillegg integrerer det tredje skriptet et sett med skrevet med Python's rammeverk. Formålet med disse testene er å automatisere valideringen av spillets funksjonalitet, og sikre at spillet oppfører seg som forventet i ulike scenarier. Ved å håne funksjon ved hjelp av unittest.mock.patch, simulerer vi brukerinndata under testing uten å kreve manuell input. Denne tilnærmingen forbedrer kodens robusthet, og lar utviklere verifisere spillets logikk under forskjellige forhold. Enhetstester hjelper med å fange opp potensielle feil tidlig, og sikrer at eventuelle endringer i programmet ikke bryter eksisterende funksjonalitet.

Retting av operand-feilen som ikke støttes i et Python-gjettespill

Løsning 1: Et enkelt Python-gjettespill som bruker standardbiblioteker

# Importing required libraries
import random
# Function for the guessing game
def guessing_game():
    # Generate a random number between 1 and 100
    number_to_guess = random.randint(1, 100)
    user_guess = None
    # Loop until the user guesses the correct number
    while user_guess != number_to_guess:
        try:
            # Get input from the user
            user_guess = int(input('Guess a number between 1 and 100: '))
        except ValueError:
            print('Please enter a valid number.')
            continue
        # Provide hints for guessing higher or lower
        if user_guess < number_to_guess:
            print('Guess higher!')
        elif user_guess > number_to_guess:
            print('Guess lower!')
    # Congratulate the user when they guess correctly
    print(f'Congratulations! The correct number was {number_to_guess}.')
# Call the function
guessing_game()

Håndtere feil med IPython.display og fikse strengformatering i Python

Løsning 2: Bruke IPython.display for formatert utgang og fikse tuppelfeilen

# Importing required libraries from IPython
from IPython.display import display, Math
import random
# Function for the guessing game with IPython display
def guessing_game_ipython():
    number_to_guess = random.randint(1, 100)
    user_guess = None
    while user_guess != number_to_guess:
        try:
            user_guess = int(input('Guess a number between 1 and 100: '))
        except ValueError:
            print('Please enter a valid number.')
            continue
        if user_guess < number_to_guess:
            print('Guess higher!')
        elif user_guess > number_to_guess:
            print('Guess lower!')
    # Correctly formatting using the f-string instead of % formatting
    display(Math(f'Congratulations! The correct number was {number_to_guess} and you typed {user_guess}'))
# Call the function
guessing_game_ipython()

Legge til enhetstester for å sikre korrekthet på tvers av miljøer

Løsning 3: Implementering av enhetstester for å verifisere spilllogikken

import unittest
from unittest.mock import patch
import random
# Function for the guessing game to be tested
def guessing_game_tested():
    number_to_guess = random.randint(1, 100)
    user_guess = None
    while user_guess != number_to_guess:
        user_guess = int(input('Guess a number between 1 and 100: '))
    return number_to_guess, user_guess
# Test class for the guessing game
class TestGuessingGame(unittest.TestCase):
    @patch('builtins.input', side_effect=[50, 75, 85, 95, 100])
    def test_guessing_game(self, mock_input):
        result = guessing_game_tested()
        self.assertEqual(result, (100, 100))
# Run the tests
if __name__ == '__main__':
    unittest.main()

Optimalisering av Python-strengformatering for visning i interaktive programmer

Et nøkkelaspekt ved å utvikle et tallgjettespill i Python er hvordan programmet samhandler med brukeren. Nærmere bestemt, når du viser meldinger som "Gjett høyere" eller "Gjett lavere", er det viktig å sikre klar og presis formatering. En vanlig utfordring ved bruk av biblioteker som formaterer utdatastrenger riktig. Selv om det er tradisjonelt å bruke prosentsymbolet (%) for strenginterpolering, kan det føre til feil som ikke-støttede operandtyper for %: 'Matematikk' og 'tuppel'. Dette problemet oppstår fordi visse biblioteker, for eksempel , krever alternative tilnærminger som f-streng formatering.

I moderne Python-programmering tilbyr f-strenger en mer effektiv og lesbar måte å sette inn variabler i strenger. For eksempel, i stedet for å skrive "Gratulerer! Det riktige tallet var %g," kan du bruke en f-streng som . F-strenger lar deg legge inn uttrykk direkte, noe som gjør koden mer konsis og eliminerer risikoen forbundet med tradisjonell strenginterpolering. Dette forbedrer ikke bare lesbarheten, men forhindrer også vanlige formateringsfeil.

I tillegg til å bruke f-strenger, er en annen viktig faktor når du bygger interaktive programmer, validering av brukerinndata. Når du aksepterer innspill fra brukere, spesielt i et spill der gjetninger gjentatte ganger legges inn, er håndtering av potensielle unntak, for eksempel inndata som ikke er heltall, avgjørende. Implementering blokker sikrer at programmet ikke krasjer på grunn av ugyldig inndata. I stedet kan den på en elegant måte be brukeren om å legge inn gyldige data, og dermed forbedre den generelle brukeropplevelsen. Denne kombinasjonen av optimalisert strengformatering og inndatavalidering fører til mer robuste og brukervennlige Python-applikasjoner.

  1. Hva betyr feilen "ikke-støttede operandtyper for %: 'Math' og 'tuple'"?
  2. Denne feilen oppstår når funksjonen brukes med feil strengformatering. Å erstatte prosentsymbolet (%) med f-strenger løser dette problemet.
  3. Hvorfor bruke f-strenger over prosentmetoden (%) i Python?
  4. F-strenger tilbyr mer lesbar og effektiv formatering sammenlignet med den tradisjonelle metode. De reduserer også risikoen for feil i kompleks strengformatering.
  5. Hvordan kan jeg håndtere ugyldig brukerinndata i et gjettespill?
  6. Du kan bruke en blokker for å fange opp feil som ValueError når brukeren legger inn ikke-heltallsdata, noe som sikrer at spillet fortsetter jevnt.
  7. Hva er rollen til i dette spillet?
  8. genererer et tilfeldig tall innenfor det angitte området (1 til 100) som brukeren kan gjette i spillet.
  9. Hvordan fungerer løkkehjelp i en gjettelek?
  10. De loop sikrer at spillet fortsetter å kjøre til brukeren gjetter det tilfeldig genererte tallet riktig.

Gjetteleken i Python kan kjøre problemfritt når strengformateringsproblemet er løst. Ved å bruke f-strenger er feilen knyttet til og tuple er løst, noe som sikrer en jevnere brukeropplevelse. Denne moderne formateringstilnærmingen er enkel å implementere og unngår vanlige fallgruver.

I tillegg håndtering av brukerinndatafeil med blokker sikrer at spillet ikke krasjer på grunn av ugyldig inndata. Disse justeringene gjør spillet mer robust og brukervennlig, og gir den nødvendige tilbakemeldingen slik at spillerne kan nyte den interaktive opplevelsen uten å støte på frustrerende feil.

  1. Forklarer bruken av og funksjoner for formatert utgang i interaktive programmer. For mer informasjon, besøk IPython-dokumentasjon .
  2. Gir informasjon om i Python for renere strenginterpolering. For videre lesing, se Python offisielle dokumentasjon .
  3. Denne kilden utdyper hvordan du håndterer feil og unntak i Python ved hjelp av blokker. Se Ekte Python: Python-unntak .
  4. Dekker det grunnleggende om Python's modulen og dens bruk for å lage gjettespill. Full referanse tilgjengelig på Python tilfeldig modul .