sdf123 Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 Jeg har begynt på denne learnpythonthehardway og sliter litt med å forstå meningen med %(modulen?). I oppgave 3 får vi blant annet denne: print "Roosters", 100 - 25 * 3 % 4 Dette blir jo gjort om til 100 - ((25 * 3) % 4). Men etter hva jeg forstår så er ikke dette prosent men en form for modul. Altså med den modulen så forteller man at man bare skal telle til 4 før man begynner igjen på 1: A familiar use of modular arithmetic is in the 12-hour clock, in which the day is divided into two 12-hour periods. If the time is 7:00 now, then 8 hours later it will be 3:00. Usual addition would suggest that the later time should be 7 + 8 = 15, but this is not the answer because clock time "wraps around" every 12 hours; in 12-hour time, there is no "15 o'clock". Likewise, if the clock starts at 12:00 (noon) and 21 hours elapse, then the time will be 9:00 the next day, rather than 33:00. Since the hour number starts over after it reaches 12, this is arithmetic modulo 12. 12 is congruent not only to 12 itself, but also to 0, so the time called "12:00" could also be called "0:00", since 0 ≡ 12 mod 12. Men jeg skjønner liksom ikke hva som er hensikten med den i Python? Lenke til kommentar
GeirGrusom Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 Jeg har begynt på denne learnpythonthehardway og sliter litt med å forstå meningen med %(modulen?). I oppgave 3 får vi blant annet denne: print "Roosters", 100 - 25 * 3 % 4 Dette blir jo gjort om til 100 - ((25 * 3) % 4). Men etter hva jeg forstår så er ikke dette prosent men en form for modul. Altså med den modulen så forteller man at man bare skal telle til 4 før man begynner igjen på 1: A familiar use of modular arithmetic is in the 12-hour clock, in which the day is divided into two 12-hour periods. If the time is 7:00 now, then 8 hours later it will be 3:00. Usual addition would suggest that the later time should be 7 + 8 = 15, but this is not the answer because clock time "wraps around" every 12 hours; in 12-hour time, there is no "15 o'clock". Likewise, if the clock starts at 12:00 (noon) and 21 hours elapse, then the time will be 9:00 the next day, rather than 33:00. Since the hour number starts over after it reaches 12, this is arithmetic modulo 12. 12 is congruent not only to 12 itself, but also to 0, so the time called "12:00" could also be called "0:00", since 0 ≡ 12 mod 12. Men jeg skjønner liksom ikke hva som er hensikten med den i Python? Modulo er rest etter divisjon. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 Men jeg skjønner liksom ikke hva som er hensikten med den i Python? Modulo operatoren finner resten. I ditt eksempel resten modulo 4. Det er uhyre viktig å kjenne operator presedens. Modulo operatoren er en kraftig og effektiv operator ofte brukt i tester og brukes også i nesten alle andre språk. Lenke til kommentar
Djn Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 (endret) Og for å forklare hva vi mener med rest, bare sånn i tilfelle: 7 / 3 = 2 7 - (2*3) = 1, som er det samme som 7 % 3 = 1 En av mange små ting det kan brukes til: for i in range(1000): if i % 10 == 0: print "Herjer med %d" % (i,) tregFunksjon(i) Det vil skrive ut en teller hver gang i er delelig på 10 - altså hver tiende iterasjon. En annen ting det kan brukes til er hvis du vil gjøre noe f.eks. annenhver gang: farger = ["white", "grey"] linjenr=1 for linje in tekst: farge = farger[linjenr % 2] print "<tr style='background-color: %s'><td><tt>%d</tt><td>%s</tr>" % (farge, linjenr, linje) linjenr += 1 Endret 22. oktober 2012 av Djn Lenke til kommentar
sdf123 Skrevet 22. oktober 2012 Forfatter Del Skrevet 22. oktober 2012 Tror jeg på en måte forstår litt, men vet ikke om jeg helt henger med hvorfor man bruker det. I @DJn sine eksempler henger jeg med, og forstår bruken av %, men i mitt eksempel så skjønner jeg ikke helt hva vitsen er. Lenke til kommentar
slacky Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 (endret) Modulo har et stort bruksområde innen programmering, dette vil du møte på så fort du har lært deg språket og begynner å kjøre en del loops. Se for deg en loop som skal kjøre en form for spørring, eller gjøre en annen oppgave for hver tredje runde. Da bruker jeg modulo: if i%3==0: compute() - Alt som kan deles med 3 vil nå utføres: 0%3 = 3%3= 6%3 = 9%3 == 0 A familiar use of modular arithmetic is in the 12-hour clock, in which the day is divided into two 12-hour periods... Blir vel noe slik han mener (forenklet for å spare tid): class Timer: def __init__(self, itr=48): self._run(itr) def _run(self, itr): i = r = 0 for x in range(itr): if r%2==0: set="am" else: set="pm" i=i+1 time = str(i)+" "+set #jukser litt (no more time) if time == "12 pm": print "12 am" elif time == "12 am": print "12 pm" else: print time if i%12==0: i=0 r=r+1 print "-------------" if __name__ == '__main__': Timer(48) #iterations Kjør koden så ser du hvordan modulo er fin å bruke (ps, indentation er feil grunnet diskusjon.no sin forferdelige kode-box). Smådårlig kode som viser deg hva som må bli gjort for 12-timers klokke. Endret 22. oktober 2012 av warpie Lenke til kommentar
sdf123 Skrevet 22. oktober 2012 Forfatter Del Skrevet 22. oktober 2012 Ja, jeg har skjønt at jeg vil komme mer borti det etterhvert, så jeg har lagt det litt på hylla inntil videre. Vil absolutt anbefale denne boka, har kommet til ex5 og driver nå å "programmerer" en converter, hehe.. # convert from lbs to kg value_in_lbs = 189 pound_in_kg = 0.45359237 convert = value_in_lbs * pound_in_kg # the long way print "%r in lbs is %f in kg." % (value_in_lbs, value_in_lbs * pound_in_kg) # the short way print "%r in lbs is %f in kg." % (value_in_lbs, convert) Lenke til kommentar
slacky Skrevet 22. oktober 2012 Del Skrevet 22. oktober 2012 (endret) Det er mange bra guider der ute, men om en ikke eksprimenterer, og utfordrer seg selv så sitter det bare i kjeldene tilfeller. Det å følge en mal uten å slippe seg fri er ingen god måte å lære på. (Sier vel bare at en guide er hva en gjør den til). Finpusset litt på omformeren din! converter.py # -*- coding: utf-8 -*- import sys class Convert: def __init__(self, weight, unit): self._convert(weight, unit) def _convert(self, weight, unit): #KG - lbs - N kg = [1, 2.20462262, 9.80665] lbs= [0.45359237, 1, 4.44822162] N = [0.101971621, 0.224808943, 1] forms = [kg, lbs, N] names = ["kilograms", "pounds", "newtons"] short = ["kg", "lbs", "N"] #Finne enheten som er valgt å regne fra i = short.index(unit) current = forms[i] for x in range(len(forms)): #konverter til: convTo = current[x] value = weight * convTo print "%d %s = %r in %s" % (weight, short[i], round(value,3), names[x]) if __name__ == '__main__': Convert(int(sys.argv[1]), sys.argv[2]) #kg, lbs or N Har forsøkt å hardkode minst mulig, skal være lett å legge til enda en måleenhet nå. For å kjøre så skriver du vekt, og en enhet: kg, lbs eller N >>> python converter.py 60 kg 60 kg = 60 in kilograms 60 kg = 132.227 in pounds 60 kg = 588.399 in newtons Selv om newton ikke er en masse-enhet, så trengte jeg enda en enhet å bruke for å gjøre eksempelet komplett. Ikke ork å kommenter det Endret 22. oktober 2012 av warpie Lenke til kommentar
sdf123 Skrevet 23. oktober 2012 Forfatter Del Skrevet 23. oktober 2012 Se der ja, forhåpentligvis vil jeg også en gang greie å kode det slikt Jeg leser hvertfall at det er veldig mange som er fornøyde med denne boka, jeg liker den hvertfall veldig godt. Man får jo også oppgaver etter hvert kapittel:) Lenke til kommentar
Djn Skrevet 23. oktober 2012 Del Skrevet 23. oktober 2012 Man får jo også oppgaver etter hvert kapittel:) Alltid en stor bonus. Lenke til kommentar
FraXinuS Skrevet 25. oktober 2012 Del Skrevet 25. oktober 2012 @warpie: Hvorfor bruker du en class i eksemplene dine, hvorfor ikke bare en vanlig funksjon? Lenke til kommentar
slacky Skrevet 25. oktober 2012 Del Skrevet 25. oktober 2012 (endret) @warpie: Hvorfor bruker du en class i eksemplene dine, hvorfor ikke bare en vanlig funksjon? Har inget spesielt grunnlag for å bruke klasse. Er en vane, fint å klassifisere i tilfeller hvor det er (lengre) script med flere (sammenhengende) funksjoner. Endret 25. oktober 2012 av warpie 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å