Hur man kan lösa en mer avancerad uppgift, A2

  • Författare
  • Meddelande
Användarvisningsbild

Zeldah

dbwebb

  • Inlägg: 504
  • Blev medlem: 02 mar 2016, 10:17

Hur man kan lösa en mer avancerad uppgift, A2

Inlägg19 sep 2019, 10:39

Nedanför går jag igenom steg för steg hur man kan tänka för att lösa uppgiften A2, https://dbwebb.se/uppgift/din-egen-chat ... -steg-1-v2, för att hjälpa en student med hur man kan tänka för att lösa lite mer avancerade uppgifter. Om man inte känner att man klarar av extreuppgifterna är det OK, de finns egentligen mer för de som redan kan programmera sen tidigare. Men det är ju alltid bra att försöka sig på lite mer avancerade saker.


Jag börjar med att strukturera upp texten lite och försöker ta reda på vad som behövs:
Vi ska "hur många gånger ett tal behöver multipliceras med två ", "input ett som är talet som ska multipliceras" så vi behöver en input och en loop för att multiplicera inputen med 2, x antal gånger.
Kod: Markera allt
number = input("Enter number")
while True:
    number = number * 2


Vi vet inte hur länge så vi börjar med denna koden.

Nästa steg är "ett input som är hur många gånger den ska försöka multiplicera innan den ger upp. " så en räknar /stepper variable . Då lägger vi till en input och kör loopen så många gånger som talet man skriver in.

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
counter = 0
while counter < tries:
    number = number * 2
    counter += 1



Jag ändrar koden för varje ny del ja lägger till. Programmering är en iterativ process, börja smått och jobba sig uppåt. Lös en liten del av problemet och lägg till lite mer som löser nästa del

"talet ska innehålla alla siffror mellan 0 och 9 minst en gång. ", då behöver vi ett sätt att kolla om ett heltal innehåller all de siffrorna. Den kan vara klurig att hitta en lösning på. Om man inte kommer på att göra om den till en sträng och kolla efter karaktärerna 0-9 försöker man nog tänka efter ett sätt att göra det medans talet fortfarande är en int och då blir det genast svårare.
Så vi vet/kommer på att om talet är en sträng kan vi kan vi kolla om en karaktär finns i den. Då vill vi kolla om alla karaktärerna 0-9 finns och det gör vi lättast med en for-loop. Då vi har en sekvens med element som vi vill loopa igenom. Så vi skapar en sån loop efter att vi har dublerat talet.
Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
    number = number * 2
    for numb in number_sequence:
        pass
    counter += 1


pass säger till python att låt koden köra på, jag gör inget här än så det kör igenom sekvensen men inget händer i loopen.


Nu behöver vi kolla om numb finns i number. Vi gör om number till en string och kollar om numb finns i den.

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
    number = number * 2
    for numb in number_sequence:
        if numb in str(number):
            pass
    counter += 1


Nästa steg är att komma på hur vi vet om alla siffrorna finns där eller inte.

Sen kom vi på att med koden jag har nu kan den inte hitta om talet man skriver in redan innehåller alla utan den multiplicerar först. Så vi borde flytta ner number = number * 2 efter for-loopen

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
        for numb in number_sequence:
        if numb in str(number):
            pass
    counter += 1
    number = number * 2



OKej så hur kollar vi om alla karaktärer finns i number. I if-satsen kollar vi nu om numb finns i number. Ett sätt är att skapa en till räknare som räknar hur många ggr vi går in i loopen och om räknaren är == längden av number_sequence vet vi att alla tal är hittade. Men ett smidigare sätt att kolla det är istället om vi gör om if-satsen så vi istället kollar om numb inte finns i number. Vi utgår ifrån att alla finns och om någon inte gör det ändrar vi en boolean variable till false och då vet vi att en karaktär inte har hittats.


Jag skapar en ny variabel i while loopen som ska användas för att kolla om alla karaktärerna finns.

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
    not_found = False   
    for numb in number_sequence:
        if numb not in str(number):
            not_found = True
            break
    counter += 1
    number = number * 2


Jag lägger också in in break i if-satsen, om vi hittar en karaktär som inte finns behöver vi inte leta efter fler. Då vet vi redan att den inte är OK så då avbryter jag for-loopen och går vidare med while.


Nu behöver vi lägga in en koll efter for-loopen för att se om någon karaktär inte hittades. Så vi gör en if-sats som kollar om not_found är False för då vet vi att alla karaktärer fanns, gör en utskrift och kör en till break för att avbryta while-loopen. Om not_found är True vill vi inte göra något speciellt då ska while-loopen bara fortsätta så vi skriver inget if-case för den.

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
    not_found = False   
    for numb in number_sequence:
        if numb not in str(number):
            not_found = True
            break
    if not not_found:
        print(number, "contains all the numbers. It took ", counter, "tries")
        break
    counter += 1
    number = number * 2


Så vad har vi kvar? det sker inget speciellt om vi uppnår max antal försök och "Om den inte lyckas innan den ska ge upp returnera -1.". Det är tyvärr dålig formulering här det borde stå skriv ut -1 och inte returnera. Vi går inte igenom det förens nästa vecka.


Efter while-loopen behöver vi kolla om conter är lika med tries för att se om det var vad som gjorde att vi lämnade while loopen. Om det var att alla hittade som gjorde att vi lämnade while-loopen borde counter vara mindre än tries och då behöver vi inte göra något.

Kod: Markera allt
number = int(input("Enter number"))
tries = int(input("Enter number of tries"))
number_sequence = "0123456789"
counter = 0
while counter < tries:
    not_found = False   
    for numb in number_sequence:
        if numb not in str(number):
            not_found = True
            break
    if not not_found:
        print(number, "contains all the numbers. It took ", counter, "tries")
        break
    counter += 1
    number = number * 2
if counter >= tries:
    print("-1")


och då borde vi ha löst uppgiften.
Användarvisningsbild

abbe

html-kodare

  • Inlägg: 12
  • Blev medlem: 01 sep 2019, 20:30

Re: Hur man kan lösa en mer avancerad uppgift, A2

Inlägg19 sep 2019, 12:48

Skönt att se en ordentlig lösning. Tack.
What if people flew before Newton discovered gravity.

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 22 gäster