Почему мой цикл PHP не работает? Или я должен добавить «если»? - PullRequest
0 голосов
/ 04 мая 2018
  • Предположим, я веду машину по кругу. На петле есть дверь. Каждый раз, когда я хочу проехать через дверь, мне нужно потратить немного денег.
  • Первоначально у меня есть 100 000 денег.
  • Когда у меня больше 50 000 денег, я трачу 5% из них как плата за проход.
  • Когда мои деньги равны или меньше 50 000, я трачу 5000 в качестве платы за проход.
  • Я хочу понять, я много раз могу пройти через дверь.
  • Первый цикл while работает. Но второй цикл while не работает. Не могли бы вы, пожалуйста, дайте мне знать, почему?
$money = 100000; // the original money I have
$a = 0; // $a defines how many times I can spend the money

// When the money I have is more than 50,000, I spend 5% of them as the pass-door fee.
while ($money > 50000) {
    $money= $money * 0.95; // The money left after each spending
    $a++; // How many times I can spend the money.
}

echo $a.'<br>'; //$a=14    So far I have passed the door 14 times.
echo $money.'<br>'; //$money=48767.497911553    So far I have 48767.497911553 money left.

У меня вопрос, почему не работают следующие коды?

// When the money I have is equal to or less than 50,000, I spend 5,000 as the pass-door fee.
while($money<=50000) {
    $money = $money - 5000; // The money left after each spending
    $a++; // How many times I can spend the money.
}

echo $a.'<br>';
echo $money. '<br>';

Ответы [ 4 ]

0 голосов
/ 04 мая 2018

Сначала я проверяю, у меня еще есть деньги:

$money = 100000; //the original money I have
$a= 0 ; // $a defines  how many times I can spend the money
$b = 0; //defines how many turns I have done;
while($money>0){
    if($money>50000){ //First option - i loose 5% of my money
        $money = $money * 0.95;
        $b = $b+1;
    }else{ //I already know that I have money
        if($money>5000){ //I can do another turn
            $money = $money - 5000;
            $b = $b + 1;
        }else{ //I have less then the money I need to do another turn
            echo "You made $b turns and now you have only $money left";
            $money = 0; //I reset the money so I get out of the while loop
            exit(); //i go out of the loop since I have nothing more to spend
        }
    }
}

С этими цифрами результат этого кода будет:

Вы сделали 23 хода, и теперь у вас осталось только 3767.497911553

Я не получил, если вы также хотите смоделировать, сколько раз у вас осталось, когда вы делаете один ход. Это приведет к другой настройке программы.

0 голосов
/ 04 мая 2018

Во втором цикле вы проходите до тех пор, пока у вас меньше 50 000, и, поскольку вы только уменьшаете свою сумму денег, вы останетесь там навсегда, я думаю, вы захотите остановить ее, как только достигнете 0 $ или меньше так что вы можете сделать это:

while($money >= 0 && $money<=50000)

В этом случае цикл перестанет уменьшать ваши деньги, как только вы достигнете 0 или ниже. Если вы хотите выполнить цикл, пока не сможете больше платить, просто сделайте:

while($money >= 5000 && $money<=50000)
0 голосов
/ 04 мая 2018

Проблема в вашем втором состоянии цикла:

while($money<=50000) 

Это всегда будет правдой, поскольку вы уменьшаете свои деньги.

Так должно быть while ($money >= 5000), так как у вас должно быть не менее 5000, чтобы заплатить комиссию

0 голосов
/ 04 мая 2018

while($money<=50000)

Ваши деньги никогда не будут больше, чем 50000 во втором цикле, потому что вы просто уменьшаете их $money=$money-5000;, поэтому вы входите в бесконечный цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...