ksgylja Skrevet 16. mai 2022 Del Skrevet 16. mai 2022 Hei. Har jobba ei stund med ei innleveringsoppgave som lyder som følger: Lage et program som etterspør et positivt heltall større enn 1 som input, og skriver ut det største og det minste primtallfaktoren til tallet. Bortsett fra når en av primtallsfaktorene er 3, 13, 113, 313 eller 613, da skal det bare skrives ut at det er et "Tommytall" Jeg har laget et program som finner største og minste primtallsfaktor, men sliter med å få det til å skrive ut "Tommytall". Altså siste del av oppgaveteksten. Prøvde å legge ved .py-fila, men fikk feilmelding. Tok derfor screenshot og la ved. Noen som har veiledning å gi meg? Lenke til kommentar
Salvesen. Skrevet 16. mai 2022 Del Skrevet 16. mai 2022 (endret) Lag en funksjon som verifiserer input, bruk en switch(tror det heter match i python?) der en først sjekker at input =< 1, om så må den returnere at det var feil input da det skal være > 1. Så lager du caser for alle tommy tall der den returnerer tommy tall. og til slutt kjører du funksjonene dine om det er valid input. EDIT: ser jeg leste litt dårlig. Du må først sjekke at input > 1, så kjøre primtall beregningene. Så kjøre en switch for de tallene som skal skrive ut tommy tall og en default som skriver primtallene. Håper det var forståelig. Endret 16. mai 2022 av Salvesen. Lenke til kommentar
ksgylja Skrevet 16. mai 2022 Forfatter Del Skrevet 16. mai 2022 Salvesen. skrev (1 time siden): Lag en funksjon som verifiserer input, bruk en switch(tror det heter match i python?) der en først sjekker at input =< 1, om så må den returnere at det var feil input da det skal være > 1. Så lager du caser for alle tommy tall der den returnerer tommy tall. og til slutt kjører du funksjonene dine om det er valid input. EDIT: ser jeg leste litt dårlig. Du må først sjekke at input > 1, så kjøre primtall beregningene. Så kjøre en switch for de tallene som skal skrive ut tommy tall og en default som skriver primtallene. Håper det var forståelig. Takk for svar! Ser at det jeg sliter mest med er den grunnleggende oppbyggingen mtp rekkefølge og innrykk. Blir fort knot når jeg setter det opp, og MYE feilsøking. Skal prøve litt til på det du skrev, men har aldri brukt switch før så tar nok litt tid 😉 Lenke til kommentar
Salvesen. Skrevet 16. mai 2022 Del Skrevet 16. mai 2022 (endret) ksgylja skrev (14 minutter siden): Takk for svar! Ser at det jeg sliter mest med er den grunnleggende oppbyggingen mtp rekkefølge og innrykk. Blir fort knot når jeg setter det opp, og MYE feilsøking. Skal prøve litt til på det du skrev, men har aldri brukt switch før så tar nok litt tid 😉 lenge siden jeg har brukt python, går mest i c# men ved google søk ser det ut til at swtich gjøres slik: match value: case condition: action(s) Så en funksjon for tommy tall kunne blitt noe slik: def tommyTall(nummer) match nummer: case 3: return "Tommy tall" case 13: return "Tommy tall" osv EDIT: du kan jo returnere ett flag også, og så lage kode for å enten skrive ut tommy tall eller primtall, litt opp til hvordan du legger det opp. Men håper oppbyggingen er forståelig Kan jo droppe switch og bruke if elseif og else men jeg synes det fort blir rotete når en skal sjekke så mye. da liker jeg switch Endret 16. mai 2022 av Salvesen. Lenke til kommentar
ksgylja Skrevet 18. mai 2022 Forfatter Del Skrevet 18. mai 2022 Salvesen. skrev (På 16.5.2022 den 14.01): lenge siden jeg har brukt python, går mest i c# men ved google søk ser det ut til at swtich gjøres slik: match value: case condition: action(s) Så en funksjon for tommy tall kunne blitt noe slik: def tommyTall(nummer) match nummer: case 3: return "Tommy tall" case 13: return "Tommy tall" osv EDIT: du kan jo returnere ett flag også, og så lage kode for å enten skrive ut tommy tall eller primtall, litt opp til hvordan du legger det opp. Men håper oppbyggingen er forståelig Kan jo droppe switch og bruke if elseif og else men jeg synes det fort blir rotete når en skal sjekke så mye. da liker jeg switch Tusen takk for innspillene. Jeg har rotet veldig med å prøve ut ulike scenarier, men programmet kjører ikke slik jeg hadde tenkt. Mistenker at jeg ikke setter ting med riktig innrykk, eller feil sjekk av de ulike variablene. Ser at det går greit å sjekke om brukeren legger inn et tall større enn 1 og at det da kjører, men når jeg legger inn at det skal printes ut at man må taste et tall større enn 1, så klarer jeg ikke å stoppe programmet. Har prøvd quit(), men får bare feilmelding. Og "break" mener jeg bare kan stoppe en løkke? Og når jeg legger inn at dersom bruker legger inn et av "Tommytallene" så sjekker den likevel minste og største faktor. Vil jo ha det slik at det ikke gjør mer enn å skrive ut at det er et tommytall dersom bruker legger inn et slikt, men og at det sjekker de ulike faktorene slik at uansett om det er minste, største eller en hvilken som helst av faktorene så skriver den ut at det er et Tommytall, og så avslutter programmet. Tok forresten bort semikolon på slutten av return-setningene på minsteFaktor, -gjør det noe? Lenke til kommentar
Salvesen. Skrevet 18. mai 2022 Del Skrevet 18. mai 2022 Prøv å lage funksjonene små og konkrete. Også kaller du de der de trengs. Ser ut som du definerer funksjonene i selve koden, det er ikke normalt. Men som sagt, lenge siden jeg har brukt py. Lenke til kommentar
Salvesen. Skrevet 18. mai 2022 Del Skrevet 18. mai 2022 if(nummer=3 or nummer=13 or nummer=113 or nummer=313 or nummer=613): print("tommy tall) elif(nummer<=1): print("Tall må være større enn 1) else: print("miste: " + minsteFaktor(nummer)) print("Største: " + storsteFaktor(nummer)) def minsteFaktor(n): #tilhørende kode def storsteFaktor(n): #tilhørende kode her er ett eksempel. Dette vill kjøre en gang og stoppe. Om du vill at de taster på ny om de legger inn feil må du ha med en løkke. Lenke til kommentar
ksgylja Skrevet 18. mai 2022 Forfatter Del Skrevet 18. mai 2022 Salvesen. skrev (4 minutter siden): if(nummer=3 or nummer=13 or nummer=113 or nummer=313 or nummer=613): print("tommy tall) elif(nummer<=1): print("Tall må være større enn 1) else: print("miste: " + minsteFaktor(nummer)) print("Største: " + storsteFaktor(nummer)) def minsteFaktor(n): #tilhørende kode def storsteFaktor(n): #tilhørende kode her er ett eksempel. Dette vill kjøre en gang og stoppe. Om du vill at de taster på ny om de legger inn feil må du ha med en løkke. Skal prøve, -TAKK! 😄 Lenke til kommentar
ksgylja Skrevet 19. mai 2022 Forfatter Del Skrevet 19. mai 2022 (endret) ksgylja skrev (21 timer siden): Skal prøve, -TAKK! 😄 Da fikk jeg ordnet alt.Tusen takk for god hjelp! ❤️ #importerer math-modulen import math #ber om et tall større enn 1 fra bruker n = int(input("Skriv et positivt heltall som er større enn 1:")) #funksjon for å finne minste primtallsfaktor def minsteFaktor(n): #Hvis delelig med 2 returnerer denne faktoren 2 #som jo da er den minste if (n % 2 == 0): return 2 # repetérer fra 3 til kvadratrot(n) i = 3; while(i * i <= n): if (n % i == 0): return i; i += 2; return n; #funksjon for å finne største primtallsfaktor def storsteFaktor(n): # Initiere den største faktoren # variabel med den laveste maxPrimtall = -1 # finn antallet 2'ere som dividerer n while n % 2 == 0: maxPrimtall = 2 n >>= 1 # ekvivalent til n /= 2 for i in range(3, int(math.sqrt(n)) + 1, 2): while n % i == 0: maxPrimtall = i n = n / i # Denne er for å takle dersom n # er et primtall større enn 2 if n > 2: maxPrimtall = n return int(maxPrimtall) #sjekker om bruker legger inn et tommytall og gir tilbakemelding på det if(n==3 or n==13 or n==113 or n==313 or n==613): print("Tommytall") #legger inn betingelsen at bruker må legge inn et tall som er større enn 1 elif(n<=1): print("Tallet må være større enn 1") #sjekker om minste faktor er et av tommytallene elif minsteFaktor(n)==3 or minsteFaktor(n)==13 or minsteFaktor(n)==113 or minsteFaktor(n)==313 or minsteFaktor(n)==613: print("Tommytall") #sjekker om største faktor er et av tommytallene elif storsteFaktor(n)==3 or storsteFaktor(n)==13 or storsteFaktor(n)==113 or storsteFaktor(n)==313 or storsteFaktor(n)==613: print("Tommytall") #dersom de ovenstående vilkårene ikke er gjeldende så skriver man ut største og minste faktor else: print("minste: " , minsteFaktor(n)) print("Største: " , storsteFaktor(n)) #kaller opp de to funksjonene minsteFaktor(n) storsteFaktor(n) Endret 19. mai 2022 av ksgylja Fikk den til! Lenke til kommentar
Salvesen. Skrevet 19. mai 2022 Del Skrevet 19. mai 2022 ksgylja skrev (10 minutter siden): Satte opp den nye koden, litt endring finpuss og den fungerer bra når bruker legger inn et av de gitte tallene. Problemet blir at dersom man legger inn 26, som jo blir 2*13, så printer den ut 2 som minste faktor, og 13 som største. Slik jeg har forstått oppgaven så skulle den bare skrive ut Tommytall dersom en av faktorene blir et av de gitte Tommytallene. Hva gjør jeg galt? Som nevnt over, ikke definer funksjonene i else. Du skal kalle funksjoner i koden ikke definere de om noe skjer. Og om du skal skrive Tommy tall etter å ha kalkulert må du sjekke slik du gjør i starten. 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå