2017-09-14 33 views
1

我不是要求功課的幫助,只是在正確的方向推動請!假拉丁發電機PHP

最近開始在大學學習PHP,其中一個練習是創建一個假拉丁生成器。

的參數必須是如下:

每一個字都有一個1比10的機率有放置後,一個逗號。
每個句子必須包含8到25個單詞。
每段必須包含3到7個句子。
每一頁都必須包含3到5段。
每個起始句子必須以大寫字母開頭。

我的如下代碼:

<?php 
$latin_words = array("lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod", "tincidunt", "ut", 
        "laoreet", "dolore", "magna", "aliquam", "erat", "volutpat", "ut", "wisi", "enim", "ad", "minim", "veniam", "quis", "nostrud", 
        "exerci", "tation", "ullamcorper", "suscipit", "lobortis", "ni", "sl", "ut", "aliquip", "ex", "ea", "commodo", "consequat", "duis", "autem", 
        "vel", "eum", "iriure", "dolor", "in", "hendrerit", "in", "vulputate", "velit", "esse", "molestie", "consequat", "vel", "illum", "dolore", "eu", 
        "feugiat", "nulla", "facilisis", "at", "vero", "eros", "et", "accumsan", "et", "iusto", "odio", "dignissim", "qui", "blandit", "praesent", "luptatum", "zzril", 
        "delenit", "augue", "duis", "dolore", "te", "feugait", "nulla", "facilisi", "ut", "wisi", "enim", "ad", "minim", "veniam", "quis", "nostrud", "exerci", "tation", "ullamcorper", 
        "suscipit", "lobortis", "nisl", "ut", "aliquip", "ex", "ea", "commodo", "consequat", "duis", "autem", "vel", "eum", "iriure", "dolor", "in", "hendrerit", "in", "vulputate", 
        "velit", "esse", "molestie", "consequat", "vel", "illum", "dolore", "eu", "feugiat", "nulla", "facilisis", "at", "vero", "eros", "et", "accumsan", "et", "iusto", "odio", 
        "dignissim", "qui", "blandit", "praesent", "luptatum", "delenit", "augue", "duis", "dolore", "te", "feugait", "nulla", "facilisi"); 

$max = count($latin_words); 
for($pagelen = rand(3,5); $pagelen != 6; $pagelen++) 
{ 
    $word = rand(0,$max - 1); 
    for($para = rand(3,7); $para != 8; $para++) 
    { 
     echo ucfirst($latin_words[$word]); 
     for($sentlen = rand(8,25); $sentlen != 26; $sentlen++) 
     { 
      $word = rand(0,$max - 1); 
      echo " " . $latin_words[$word]; 
      for($comchance = rand(1,10); $comchance == 10; $comchance++) 
      { 
       echo ","; 
      } 
     } 
     echo ". "; 
    } 
    echo "<br/><br/>"; 
} 
?> 

  • 我想我已經得到了這一切的權利,直到我開始注意到,我有時讓每頁只有1款。

  • 我也不知道如何停止逗號後面跟着句號 - 我讀了一個開關可能會工作,但我們沒有覆蓋這個,所以我很謹慎地添加一個。
  • 任何推動正確的方向將不勝感激!

    +0

    你的循環應該倒數而不是up。 – EvanM

    +0

    @EvanM如果循環倒數,它們將永遠不會擊中目標 –

    +0

    也許可以考慮在HackerRank網站上添加它作爲問題。 –

    回答

    1

    這裏,希望這有助於:

    $latin_words = array("lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod", "tincidunt", "ut", 
             "laoreet", "dolore", "magna", "aliquam", "erat", "volutpat", "ut", "wisi", "enim", "ad", "minim", "veniam", "quis", "nostrud", 
             "exerci", "tation", "ullamcorper", "suscipit", "lobortis", "ni", "sl", "ut", "aliquip", "ex", "ea", "commodo", "consequat", "duis", "autem", 
             "vel", "eum", "iriure", "dolor", "in", "hendrerit", "in", "vulputate", "velit", "esse", "molestie", "consequat", "vel", "illum", "dolore", "eu", 
             "feugiat", "nulla", "facilisis", "at", "vero", "eros", "et", "accumsan", "et", "iusto", "odio", "dignissim", "qui", "blandit", "praesent", "luptatum", "zzril", 
             "delenit", "augue", "duis", "dolore", "te", "feugait", "nulla", "facilisi", "ut", "wisi", "enim", "ad", "minim", "veniam", "quis", "nostrud", "exerci", "tation", "ullamcorper", 
             "suscipit", "lobortis", "nisl", "ut", "aliquip", "ex", "ea", "commodo", "consequat", "duis", "autem", "vel", "eum", "iriure", "dolor", "in", "hendrerit", "in", "vulputate", 
             "velit", "esse", "molestie", "consequat", "vel", "illum", "dolore", "eu", "feugiat", "nulla", "facilisis", "at", "vero", "eros", "et", "accumsan", "et", "iusto", "odio", 
             "dignissim", "qui", "blandit", "praesent", "luptatum", "delenit", "augue", "duis", "dolore", "te", "feugait", "nulla", "facilisi"); 
    
    
    $max = count($latin_words); 
    for($pagelen = 0; $pagelen < rand(3,5); $pagelen++) 
    { 
        for($para = 0; $para < rand(3,7); $para++) 
        { 
         // first word here, so the max nr. of words in the next for statement will be rand(7,24) 
         echo ucfirst($latin_words[rand(0,$max - 1)]); 
         $nr_words = rand(7,24); 
         for($sentlen = 0; $sentlen < $nr_words; $sentlen++) 
         { 
          // if this is not the last word 
          if($sentlen < $nr_words - 1) 
          { 
           $word = $latin_words[rand(0,$max - 1)]; 
           echo " " . $word; 
           // 10% chance 
           if(rand(1,10) == 1) echo ","; 
          } 
          else 
          { 
           // this is the last word so echo a full stop 
           echo ". "; 
          } 
         } 
        } 
        echo "<br><br>"; 
    }      
    
    2

    我想我已經得到了這一切的權利,直到我開始注意到,我有時讓每頁只有1款。

    考慮您的循環條件:

    for($pagelen = rand(3,5); $pagelen != 6; $pagelen++) 
    

    這臺三門和五,而且這個數字直到它等於6增量之間的隨機數。

    這意味着有時$pagelen將被設置爲5,循環執行一次,然後$pagelen++$pagelen6,所以$pagelen != 6爲假,你的循環結束。

    相反,你應該從零開始,並增加了一個隨機數3和5之間

    for($i = 0, $pagelen = rand(3,5); $i < $pagelen; $i++) 
    

    你其他循環有同樣的問題。這不會完全解決它,但希望它會爲你的正確方向推動。