Occi Skrevet 13. januar 2011 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?
Degeim Skrevet 13. januar 2011 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
Runar Skrevet 13. januar 2011 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
Occi Skrevet 13. januar 2011 Forfatter 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
Zic0 Skrevet 13. januar 2011 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
Occi Skrevet 13. januar 2011 Forfatter 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
Thomas. Skrevet 13. januar 2011 Skrevet 13. januar 2011 <?php $array = array('a' => 'b', 'c' => 'd'); echo count($array),' indexer'; ?> 1
Occi Skrevet 13. januar 2011 Forfatter 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
slacky Skrevet 1. februar 2011 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();
ze5400 Skrevet 1. februar 2011 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/>" : "");
slacky Skrevet 2. februar 2011 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
Matsemann Skrevet 2. februar 2011 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
snippsat Skrevet 3. februar 2011 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
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å