4 svar
388 visningar
Arythmeatox behöver inte mer hjälp
Arythmeatox 28
Postad: 4 feb 2022 11:31

Mitt första multiplikationsprogram

Tjena! Jag har precis börjar intressera mig för programmering och skulle programmera en egen liten "multiplikationstränare".  

from random import *
from time import *

 

def prod(p):
    if (p) == (a * b):
        print('Rätt!')
        return True
    else:
        print('Fel! Försök igen.')
        return False

a = randint(1,10)
b = randint(1,10)

while True:
    #a = randint(1,10)
    #b = randint(1,10)
    p = int(input(f' Vad är produkten av {a} och {b}? '))
    if prod(p) == True:
         sleep(2)

 

Mitt problem ligger i att om jag gissar fel produkt, så ger den mig två nya heltal. Jag vill att den ska loopa på samma heltal tills de blir rätt. Hur löser jag detta problem? 

Anledningen till de kommenterade randint:erna är för att första gången jag körde programmet så genererades bara två tal sen slutade det så jag flyttade in de i while-loopen. Sedan flyttade jag ut de av någon anledning, (kommer inte ihåg varför) men det fungerar ändå. 

Tack på förhand!

Ary

Programmeraren 3390
Postad: 4 feb 2022 12:39

Du kan ha en while-loop inuti den befintliga while-loopen efter att du tilldelat a och b slumptal. Den inre whileloopen loopar tills programmet får rätt svar.

Arythmeatox 28
Postad: 4 feb 2022 17:31

Så efter sleep(2) lägger jag till en while True, men vad händer efter den?  Jag skrev såhär:

 while True:
             if prod(p) != True:

Men vad skriver jag därunder? Jag vet inte kommandot för att fortsätta. Jag testade continue, men då fastnar den på samma heltal så även efter du har skrivit rätt så kommer bara samma tal upp. 

Programmeraren 3390
Postad: 4 feb 2022 17:48 Redigerad: 4 feb 2022 17:48

Som koden ser ut i frågan kan det inte bli nya slumptal om man svarar fel.

Jag programmerar inte python men i princip:

while (true) {
  // generate a and b
  a = ...;
  b = ...;
  while (true) {
    // get user input
    p = ...;
    // check answer:
    if (prod(a, b, p) == true)
      break;
  }
}

Har lagt till a och b i prod()-metoden som kontrollerar för att slippa ha globala variabler men funkar även utan detta.

Den yttre loopen är för att få nya tal när man svarat rätt.

Arythmeatox 28
Postad: 5 feb 2022 11:09

Nu fungerade det! Tack för hjälpen :-) 

Svara
Close