%: 'Matemaatika' ja 'korter' arvamismängus: Toetamata operandi tüüp(id): kuidas seda parandada

Temp mail SuperHeros
%: 'Matemaatika' ja 'korter' arvamismängus: Toetamata operandi tüüp(id): kuidas seda parandada
%: 'Matemaatika' ja 'korter' arvamismängus: Toetamata operandi tüüp(id): kuidas seda parandada

Levinud Pythoni viga interaktiivse äraarvamismängu loomisel

Pythoni õppimisel on üks põnevamaid projekte interaktiivsete mängude ehitamine nagu numbrite äraarvamise mäng. Sellised projektid aitavad teil mõista, kuidas Python suhtleb kasutaja sisendiga ja kasutab programmi käitumise juhtimiseks juhtimisvoogu. Sel juhul on eesmärk, et Python paluks kasutajal arvata arv vahemikus 1 kuni 100, andes tagasisidet, et arvata suurem või väiksem, ja lõpuks kinnitada, millal on õige oletus tehtud.

Kuid nagu paljude programmeerimisharjutuste puhul, võib tekkida vigu, mis pole kohe selged. Üks tõrge, mis võib Pythoni õpetust järgides ilmneda, nagu see, mille kallal töötate, on % toetamata operandi tüüp(id): 'Math' ja 'tuple'. See võib olla masendav, eriti kui süntaks tundub esmapilgul õige.

Selles äraarvamismängus ilmneb viga tavaliselt siis, kui proovite stringi valesti vormindada, kasutades matemaatika funktsioonis IPython.display raamatukogu. See on tavaline viga, kuid lahendus on pärast tuvastamist lihtne.

Selles juhendis selgitatakse, mida viga tähendab, miks see ilmneb ja kuidas saate Pythoni koodi selle parandamiseks muuta. Lõpuks on teil täiesti toimiv äraarvamismäng ilma segase veateateta!

Käsk Kasutusnäide
random.randint() See funktsioon alates juhuslik teek genereerib juhusliku täisarvu määratud vahemikus. Arvamismängus genereeritakse seda juhusliku arvu 1 ja 100 vahel, et kasutaja saaks ära arvata. Näide: random.randint(1, 100).
IPython.display.Math() See käsk IPython.display moodulit kasutatakse matemaatiliste avaldiste kuvamiseks vormindatud viisil. Lahenduses aitab see vormindada väljundit, et kuvada õige arv ja kasutaja oletus. Näide: Math(f'Palju õnne! Õige arv oli {a}').
unittest.mock.patch() Seda funktsiooni kasutatakse teie koodis oleva funktsiooni või objekti asendamiseks prooviversiooniga testimise ajal. See on eriti kasulik ühikutestides, et simuleerida kasutaja sisendit ilma käsitsi sekkumiseta. Näide: @patch('builtins.input', side_effect=[50, 75, 85, 95, 100]).
unittest.TestCase Baasklass aastal ühiktest moodul testide loomiseks. See loob raamistiku üksikute funktsioonide testimiseks, et tagada nende ootuspärane käitumine. Näide: klass TestGuessingGame(unittest.TestCase).
continue Seda juhtimisvoo käsku kasutatakse silmuses praeguse iteratsiooni vahelejätmiseks ja järgmise juurde liikumiseks. Skriptis tagab see, et programm jätkab pärast valest sisendist tingitud ValueErrori tabamist. Näide: jätka.
try-except Vigade käsitlemiseks kasutatav struktuur võimaldab programmil jätkata töötamist isegi siis, kui tehakse erand. Arvamismängus käsitleb see valesid kasutajaid, kes ei sisesta täisarve. Näide: try: ... välja arvatud ValueError:.
input() See funktsioon salvestab kasutaja sisendi stringina. Arvamismängus kasutatakse seda selleks, et paluda kasutajal oma oletus sisestada. Sisend teisendatakse hiljem täisarvuks. Näide: user_guess = int(input('Arva ära arv vahemikus 1 kuni 100: ')).
f-string Kasutusele võetud Python 3.6, f-stringid võimaldavad stringide lihtsat vormindamist, manustades avaldised otse stringi. Lahenduses kasutatakse neid lõppsõnumi väljundi vormindamiseks. Näide: f'Palju õnne! Õige number oli {a}'.
unittest.main() See käsk käivitab Pythoni testkomplekti ühiktest raamistik. Seda kasutatakse programmi jaoks kirjutatud testide automaatseks avastamiseks ja käivitamiseks. Näide: if __name__ == '__main__': unittest.main().

Pythoni äraarvamismängu koodi taga oleva mehaanika mõistmine

Pythoni äraarvamismängu skript on loodud selleks, et kasutaja saaks arvata juhuslikult genereeritud arvu vahemikus 1 kuni 100. Selle programmi esimene oluline element on random.randint() funktsioon, mis genereerib juhusliku täisarvu määratud vahemikus (1 kuni 100). See moodustab mängu põhiloogika, kuna see annab salanumbri, mille kasutaja peab ära arvama. Seejärel palub programm kasutajal sisestada oma oletus, kasutades nuppu sisend() funktsioon, mis salvestab kasutaja sisendi stringina ja teisendatakse hiljem võrdluse eesmärgil täisarvuks.

Silmuse struktuur mängib mängu voo kontrollimisel otsustavat rolli. A samas tsüklit kasutatakse pidevaks kontrollimiseks kasutaja oletuste ja juhuslikult genereeritud arvuga. Kuni kasutaja oletus on vale, jätkab tsükkel mängijal viipa "Arva kõrgemale" või "Arva madalamale". Silmuse sees olev tingimus võrdleb kasutaja oletust salajase numbriga, tagades, et mäng annab asjakohast tagasisidet ilma enneaegse lõpetamiseta. Kasutaja sisestust sel viisil käsitledes muutub mäng interaktiivseks, suunates mängija õige vastuse poole.

Teises skriptis kasutades IPython.display, tutvustame keerukamat väljundvormingut Matemaatika(), funktsioon, mida kasutatakse sõnumite kuvamiseks matemaatilises vormingus. Protsendisümboli (%) esialgne kasutamine mitme muutujaga sõnumi vormindamiseks põhjustas aga vea: % jaoks ei toetata operandi tüüpe: 'Math' ja 'tuple'. See viga tekib seetõttu matemaatika ei toeta seda stringi interpolatsiooni vormi. Selle asemel lahendab Pythoni kaasaegse f-stringi vormingu kasutamine, mis on intuitiivsem, selle probleemi ja kuvab mängu lõpus õigesti vormindatud sõnumi, kui kasutaja arvab õigesti.

Lisaks integreerib kolmas skript komplekti ühikutestid kirjutatud Pythoni abil ühiktest raamistik. Nende testide eesmärk on automatiseerida mängu funktsionaalsuse valideerimist, tagades, et mäng käitub erinevates stsenaariumides ootuspäraselt. Pilates sisend() funktsiooni kasutades unittest.mock.patch, simuleerime testimise ajal kasutaja sisestusi, ilma et oleks vaja käsitsi sisestada. See lähenemisviis suurendab koodi vastupidavust, võimaldades arendajatel kontrollida mängu loogikat erinevates tingimustes. Seadmetestid aitavad võimalikke vigu varakult tuvastada, tagades, et programmi mis tahes muudatused ei riku olemasolevaid funktsioone.

Toetamata operandi vea parandamine Pythoni oletusmängus

Lahendus 1: lihtne Pythoni äraarvamismäng, mis kasutab standardseid teeke

# 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()

Vigade käsitlemine rakendusega IPython.display ja Pythonis stringi vormindamise parandamine

Lahendus 2: IPython.display kasutamine vormindatud väljundi jaoks ja korteeži vea parandamine

# 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()

Ühiktestide lisamine, et tagada kõikides keskkondades õigsus

Lahendus 3: üksusetestide rakendamine mänguloogika kontrollimiseks

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()

Pythoni stringi vormingu optimeerimine kuvamiseks interaktiivsetes programmides

Pythonis numbrite äraarvamise mängu arendamise üks peamisi aspekte on see, kuidas programm kasutajaga suhtleb. Täpsemalt, kui kuvatakse selliseid sõnumeid nagu "Arva kõrgemale" või "Arva madalamale", on oluline tagada selge ja täpne vormindamine. Levinud väljakutse selliste teekide kasutamisel nagu IPython.display vormindab väljundstringe õigesti. Kuigi protsendisümboli (%) kasutamine stringide interpoleerimiseks on traditsiooniline, võib see põhjustada tõrkeid, nagu näiteks toetamata operandi tüüp(id): 'matemaatika' ja 'korter'. See probleem ilmneb seetõttu, et teatud teegid, nt Matemaatika(), nõuavad alternatiivseid lähenemisviise, nagu f-stringi vormindamine.

Kaasaegses Pythoni programmeerimises pakuvad f-stringid tõhusamat ja loetavamat viisi muutujate stringidesse sisestamiseks. Näiteks selle asemel, et kirjutada "Palju õnne! Õige arv oli %g", võite kasutada f-stringi nagu f'Congratulations! The correct number was {number}'. F-stringid võimaldavad teil avaldisi otse manustada, muutes koodi kokkuvõtlikumaks ja välistades traditsioonilise stringide interpoleerimisega seotud riskid. See mitte ainult ei paranda loetavust, vaid hoiab ära ka tavalised vormindusvead.

Lisaks f-stringide kasutamisele on interaktiivsete programmide loomisel veel üks oluline aspekt kasutaja sisendi valideerimine. Kasutajatelt sisendi vastuvõtmisel, eriti mängus, kus oletusi sisestatakse korduvalt, on võimalike erandite, näiteks mittetäisarvuliste sisestuste käsitlemine ülioluline. Rakendamine try-except plokid tagab, et programm ei jookse vigase sisendi tõttu kokku. Selle asemel võib see paluda kasutajal sisestada kehtivaid andmeid, parandades seeläbi üldist kasutajakogemust. See optimeeritud stringivormingu ja sisendi valideerimise kombinatsioon viib jõulisemate ja kasutajasõbralikumate Pythoni rakendusteni.

Korduma kippuvad küsimused Pythoni oletusmängu ja vigade kohta

  1. Mida tähendab tõrge "toetamata operandi tüüp(id) % jaoks: 'Math' ja 'tuple'"?
  2. See viga ilmneb siis, kui Math() funktsiooni kasutatakse vale stringivorminguga. Protsendisümboli (%) asendamine f-stringidega lahendab selle probleemi.
  3. Miks kasutada Pythonis f-stringe protsendi (%) meetodi asemel?
  4. F-stringid pakuvad traditsioonilisega võrreldes loetavamat ja tõhusamat vormindamist % meetod. Need vähendavad ka keeruliste stringivormingute vigade ohtu.
  5. Kuidas mõistatusmängus käituda kehtetu kasutaja sisestusega?
  6. Võite kasutada a try-except blokk, et tabada vigu, nagu ValueError, kui kasutaja sisestab mittetäisarvulisi andmeid, tagades mängu sujuva jätkumise.
  7. Mis on roll random.randint() selles mängus?
  8. random.randint() genereerib juhusliku arvu määratud vahemikus (1 kuni 100), mida kasutaja saab mängus ära arvata.
  9. Kuidas toimib while loop abi äraarvamismängus?
  10. The while loop tagab, et mäng jätkub seni, kuni kasutaja juhuslikult genereeritud numbri õigesti ära arvab.

Pythoni oletusmängude vormindamisvigade parandamine

Kui stringi vormindamise probleem on lahendatud, võib Pythoni oletusmäng sujuvalt töötada. F-stringe kasutades on viga seotud Matemaatika() ja korteež on lahendatud, tagades sujuvama kasutuskogemuse. Seda kaasaegset vormindamisviisi on lihtne rakendada ja see väldib tavalisi lõkse.

Lisaks kasutaja sisestusvigade käsitlemine rakendusega proovi-välja arvatud plokid tagab, et mäng ei jookse kokku vigase sisendi tõttu. Need kohandused muudavad mängu jõulisemaks ja kasutajasõbralikumaks, pakkudes mängijatele vajalikku tagasisidet, et nautida interaktiivset kogemust ilma masendavate vigadeta.

Viited ja lisaressursid Pythoni oletusmängu jaoks
  1. Selgitab kasutamist IPython.display ja Matemaatika() funktsioonid vormindatud väljundi jaoks interaktiivsetes programmides. Lisateabe saamiseks külastage IPythoni dokumentatsioon .
  2. Annab teavet selle kohta f-stringi vormindamine Pythonis stringide puhtamaks interpoleerimiseks. Lisalugemiseks vt Pythoni ametlik dokumentatsioon .
  3. See allikas selgitab, kuidas Pythoni abil vigu ja erandeid käsitleda proovi-välja arvatud plokid. Vaata Päris Python: Pythoni erandid .
  4. Hõlmab Pythoni põhitõdesid juhuslik moodul ja selle rakendus äraarvamismängude loomisel. Täielik viide on saadaval aadressil Pythoni juhuslik moodul .