Occi Skrevet 13. januar 2011 Del Skrevet 13. januar 2011 Hei Leker meg litt med PHP og prøvde å lage et enkelt terningskast-script som kaster en terning 100 ganger og skriver ut hvor mange det er av hver. Men det er tydeligvis noe feil med koden: <?php function dice() { for($i = 0; $i < 100; $i++) { switch(rand(0, 5)) { case 0: $en++; case 1: $to++; case 2: $tre++; case 3: $fire++; case 4: $fem++; case 5: $seks++; } } return "Antall énere: " . $en . "<br/>" . "Antall toere: " . $to . "<br/>" . "Antall treere: " . $tre . "<br/>" . "Antall firere: " . $fire . "<br/>" . "Antall femere: " . $fem . "<br/>" . "Antall seksere: " . $seks . "<br/>"; } echo dice() . "<br/>Noe feil..."; ?> Du kan se scriptet i aksjon her, som oppgave 5.6. Må jeg f. eks ha med break her egentlig? Lenke til kommentar
Degeim Skrevet 13. januar 2011 Del Skrevet 13. januar 2011 (endret) Ja, du trenger break. Og bruk av arrays kunne forenklet koden din en del. Endret 13. januar 2011 av Degeim 1 Lenke til kommentar
Runar Skrevet 13. januar 2011 Del Skrevet 13. januar 2011 Må jeg f. eks ha med break her egentlig? Helt riktig. http://php.net/manual/en/control-structures.switch.php 1 Lenke til kommentar
Occi Skrevet 13. januar 2011 Forfatter Del Skrevet 13. januar 2011 (endret) Damn raske svar, takker! :-D Akkurat nå lurer jeg dog på hvorfor jeg ikke prøvde break først når jeg spurte Var vel litt det at jeg er vant med switch og break, men jeg tenkte litt som slik at kanskje det kunne gå uten break mtp. casene ikke var like på noen måte. Og bruk av arrays kunne forenklet koden din en del. Beklager at jeg er litt treig, men har kun erfaring fra Java og er litt uvant med slik arrays ofte settes opp i PHP, så om du kunne illustrert hadde det vært fint : ) Endret 13. januar 2011 av Occi Lenke til kommentar
Zic0 Skrevet 13. januar 2011 Del Skrevet 13. januar 2011 (endret) Blir som med java: java.util.Random gen = new java.util.Random(); int[] terningsFrekvens = new int[6]; for(...) terningFrekvens[gen.nextInt(6)]++; Tar jeg ikke feil trenger man ikke deklarere arrayet i PHP engang (Er litt rusten på den) //Vet ikke om denne er nødvendig for($i = 0; $i < 6; $i++) $terning[$i] = 0; for(...) $terning[rand(0, 5)]++; Endret 13. januar 2011 av Zic0 1 Lenke til kommentar
Occi Skrevet 13. januar 2011 Forfatter Del Skrevet 13. januar 2011 (endret) Tar jeg ikke feil trenger man ikke deklarere arrayet i PHP engang (Er litt rusten på den) Riktig :-) Og takk Zic0, akkurat det jeg trengte for å komme på hvordan jeg burde gjøre det :-) Har nemlig gjort dette med terning tidligere, men fant ikke .java-filen, så klarte jeg ikke å se for meg hvordan det var best å løse det. Har også effektivisert koden endel: <?php function dice() { for($i = 0; $i < 100; $i++) { $roll[rand(0,5)]++; } for($i = 0; $i < 6; $i++) { echo "Antall " . ($i + 1) . "ere = " . $roll[$i] . "<br/>"; } } echo dice(); ?> Det jeg dog lurer på: Jeg tror jeg har sett en innebygd funksjon i PHP som teller opp antall variable for hver index i en array, og returnerer dette, men jeg husker ikke navnet og klarer ikke å Google. Er dette bare noe tull som jeg kanskje innbiller meg? Da kunne det jo vært noe slik som dette under, som hadde gjort det enda kortere. echo "Antall " . ($i++ + 1) . "ere = " . tellOpp($roll[]); Endret 13. januar 2011 av Occi Lenke til kommentar
Thomas. Skrevet 13. januar 2011 Del Skrevet 13. januar 2011 <?php $array = array('a' => 'b', 'c' => 'd'); echo count($array),' indexer'; ?> 1 Lenke til kommentar
Occi Skrevet 13. januar 2011 Forfatter Del Skrevet 13. januar 2011 (endret) Takk skal du ha Thomas., er garantert kjekt til seinere bruk, men er litt usikker på om det vil gjøre denne koden kortere. Prøvde med en str_repeat, men den reagerte visst ikke på f. eks $j++ Endret 13. januar 2011 av Occi Lenke til kommentar
slacky Skrevet 1. februar 2011 Del Skrevet 1. februar 2011 Såvidt jeg kan se så var det lite å gjøre, men så noen vanlige "feil" function dice() { for($i = 1; $i <= 100; $i++) { $roll[rand(1,6)]++; } for($i = 1; $i <= 6; $i++) { echo "Antall {$i}-ere = {$roll[$i]} <br/>"; } } echo dice(); Lenke til kommentar
ze5400 Skrevet 1. februar 2011 Del Skrevet 1. februar 2011 Regner med det bare er en liten glipp fra din side, tROOP4H, men det er ingen grunn til å kalle dice() med echo, da den ikke returnerer noe Forøvrig kan det være greit å ikke ha <br/> på den siste linjen man printer. echo "Antall {$i}-ere = {$roll[$i]}" . (($i % 6) ? "<br/>" : ""); Lenke til kommentar
slacky Skrevet 2. februar 2011 Del Skrevet 2. februar 2011 (endret) Regner med det bare er en liten glipp fra din side, tROOP4H, men det er ingen grunn til å kalle dice() med echo, da den ikke returnerer noe Forøvrig kan det være greit å ikke ha <br/> på den siste linjen man printer. echo "Antall {$i}-ere = {$roll[$i]}" . (($i % 6) ? "<br/>" : ""); Ja, det er helt sant Vandt med å benytte meg av return() i funkjoner Endret 2. februar 2011 av tROOP4H Lenke til kommentar
Matsemann Skrevet 2. februar 2011 Del Skrevet 2. februar 2011 Må jeg f. eks ha med break her egentlig? Du har allerede fått svar, men for å utdype: switch-case er såkalt fall-through. Bra forklart i manualen: It is important to understand how the switch statement is executed in order to avoid mistakes. The switch statement executes line by line (actually, statement by statement). In the beginning, no code is executed. Only when a case statement is found with a value that matches the value of the switch expression does PHP begin to execute the statements. PHP continues to execute the statements until the end of the switch block, or the first time it sees a break statement. If you don't write a break statement at the end of a case's statement list, PHP will go on executing the statements of the following case. http://php.net/manual/en/control-structures.switch.php 1 Lenke til kommentar
snippsat Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 Det jeg dog lurer på: Jeg tror jeg har sett en innebygd funksjon i PHP som teller opp antall variable for hver index i en array, og returnerer dette Du har array-count-values <?php $dice = array(1, 1, 5, 5, 4, 6); print_r (array_count_values($dice)); ?> //Array ( [1] => 2 [5] => 2 [4] => 1 [6] => 1 ) Et terningskast med python. >>> from collections import Counter >>> print Counter([randint(1,6) for i in range(100)]) Counter({1: 20, 2: 19, 5: 18, 3: 16, 4: 15, 6: 12}) En grei løsning med collections Counter som er ligner på array-count-values i PHP. Bruker list comprehension som er rimlig vanlig og bruke i python. Bryter man opp list comprehension blir det sånn. l = [] for i in range(100): l.append([randint(1,6)) print l collections Counter virker fra pyton 2.7 --> Eller så har det vært mest vanlig i python og bruke dictionary for og telle elementer. >>> d = {} >>> dice = [randint(1,6) for i in range(100)] >>> d = {} >>> for v in dice: d[v] = d.get(v, 0) + 1 >>> print d {1: 11, 2: 20, 3: 19, 4: 17, 5: 12, 6: 21} >>> #Eller på en line >>> print dict((k, dice.count(k)) for k in set(dice)) {1: 11, 2: 20, 3: 19, 4: 17, 5: 12, 6: 21} 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å