tisdag 16 oktober 2012

Mer om kodning samt repetitionsuppgifter 1.2

Funktioner i funktioner

Redan i början av kursen introducerades en funktion som var innuti en annan funktion, så kallade nästlade funktioner. Nämligen:
 
vinkeln=float(input("vinkeln="))
 
Där funktionen input körs först och svaret direkt hanteras av funktionen float. Denna typ av skrivning är mycket vanlig för att slippa onödiga variabler. Alternativet skulle varit att först skapa en strängvariabel med input och sedan på en ny rad göra om den till ett tal:

s=input("vinkeln=")
vinkeln=float(s)

Något som ju är klumpigare både för programmeraren och datorn. Fram över kommer vi i högre utsträckning ha användning för denna typ av skrivning.

Metoder efter metoder

På liknande sätt som funktioner kan nästlas kan metoder skrivas efter varandra med punkt mellan. Nedanstående följd av metoder skriver ut "STOP" från texten "stopp":

"stopp".upper().replace("STOPP", "STOP")

Övning 1.39
Testa ovanstående i interaktiva skalet.

Funktioner i villkor

Det går även att använda funktioner som input direkt i ett villkor.

Övning 1.40
Använd interaktiva skalet och testa detta:
while input("Sluta? ") !="J" : print("Ett varv till")

Nyckel ordet pass

Det finns situationer då språket kräver att en sats finns men du inte vill att någon åtgärd görs. Då kan pass komma till användning. Ex:

while True :
    try:
        x=float(input("Skriv ett tal "))
        break
    except ValueError :
        pass

En annan användning av pass är som platshållare för icke implementerade delar av programmet medan du programmerar:

if slut_pengar :
    pass #Här ska något fiffigt göras

Bra kodstil

Alla språk har en praxis för hur man bör skriva koden. Att följa denna hjälper dig själv och andra att läsa din kod. Här följer bra praxis för Python:
  • Använd 4 mellanslag för indrag, inte tab.
  • Använd radbrytning så att raderna inte blir längre än 79 tecken. Detta underlättar läsning och man kan ha flera filer kod bredvid varandra på skärmen.
  • Använd blankrader för att separera kod i stycken. Dela efter sammanhängande innehåll.
  • Initiera variabler och konstanter i början av den kod där de används när så är möjligt.
  • Sätt i första hand kommentarer på en egen rad. Undvik placeringar i slutet av längre kodrader.
  • Använd dokumentationssträngar. Vi återkommer till dem och mer om koddokumentation senare i kursen.
  • Använd mellanslag runt operatorer och efter komma, men inte direkt efter eller före parenteser. Ex: a = f(1, 2) + g(3, 4).
  • Namnge variabler, funktioner mm. så att dess syfte och funktion framgår.
  • Namnge variabler, funktioner och klasser på ett konsistent sätt. Variabler, funktioner och metoder skrivs med sma_bokstaver_och_streck_mellan_orden.  Klasser skrivs MedStorForstaBokstav och ihopskrivna ord.
  • Använd self som namn på det första metodargumentet. Vi återkommer till detta.
  • Använd inte udda tecken i koden. För namn på variabler mm bör du hålla dig till Aa-Zz samt 0-9

Repetitionsuppgifter 1.2


Rep 1.4
Skriv ett logiskt uttryck i Python som returnerar True om talet x är: Större än 100 eller mindre än 50 men inte 20.

Rep 1.5
Skriv ett program som gör en tabell med kolumner för talet, talets kvadrat och kub (upphöjt till tre) för talen 1 till och med 20.

Rep 1.6
Skriv ett program som talar om värdesiffrorna i ett heltal som användaren matar in.
Exempel på utskrift:
Skriv ett heltal 1234
1000-talssiffran är 1
100-talssiffran är  2
10-talssiffran är 3
1-talssiffran 4

Tips: Behandla talet som en sträng

Rep 1.7
Använd interaktiva skalet och testa följande logiska uttryck: not (not a and not b)
Sätt in olika kombinationer av True och False i stället för a respektive b.
Påminner resultaten om något annat logiskt uttryck?

Rep 1.8
Skriv ett program som talar om om ett inmatat tal är ett primtal. Se nedanstående pseudokod för programmeringstips.

input tal
beräkna roten ur talet avrundat till närmaste högre heltal
Sätt primtal=True
för alla tal mellan 2 och roten ur talet :
    om delbart sätt primtal=False och hoppa ur loopen
skriv ut om det är ett primtal eller inte

Rep 1.9
För att simulera radioaktivt sönderfall brukar man kasta ett större antal tärningar i flera omgångar och efter varje kast plocka bort sexorna och räknar hur många tärningar som är kvar. Skriv ett program som gör motsvarande simulering. Se pseudokoden nedan:

sätt antal tärningar till 1000
sätt antal kast till noll
medan det finns tärningar kvar:
    skriv ut antal gjorda kast och antal tärningar som är kvar
    för varje tärning som är kvar:
         slumpa ett heltal 1 till och med 6 och om det blir 6 ta bort en tärning.
    öka antal kast med ett


Rep 1.10
Inom logik används ibland a XOR b. Där XOR är förkortning för exlusive or. Denna operation returnerar sant om antingen a är sant eller  b är sant men inte om båda är sanna. Skriv ett logiskt uttryck i Python som motsvarar XOR.
Tips: Det finns ett fiffigt sätt!

Rep 1.11
Skriv ett program där två "hästar" tävlar mot varandra genom att ta slumpade steg som i uppgift 1.3. Användaren satsar på en av hästarna före start och får sedan reda på om hen vann eller förlorade när "hästarna gått i mål. 

Resultat av Rep 1.9 plottat med GNUplot

Inga kommentarer:

Skicka en kommentar