Не работает if внутри while

дополнительное условие if (elif) не работает в цикле while

Все ! Я очень плохо знаком с Python и пытаюсь изучить некоторые основы. Я столкнулся с задачей при прохождении онлайн-курсов для начинающих. Задача состояла в том, чтобы создать программу, которая будет читать строку из нескольких букв, например, «aaabbbccc», и выводить «a3b3c3» (другой пример: это может быть «abccaab», тогда программа должна вывести «a1b1c2a2b1»). Я думал, что нашел способ справиться с этим, используя цикл while, но в конце, когда я добавляю elif-конструкцию в if else, он не работает: когда я ввожу свою строку и нажимаю ввод, она просто переходит к следующему линия и кажется, что программа еще не началась. Я буду очень благодарен за любые комментарии или советы о том, как это исправить, или за любые альтернативные идеи, которые помогут решить задачу.

2 ответа

Ну, ответ на вашу проблему — «у вас бесконечный цикл». Зачем?

Проверьте эту часть вашего кода:

Как вы можете видеть, этот блок внутри оператора if будет выполняться, когда j == len(n)-1 означает, что j (который вы используете, чтобы пройти через n , достигнет последнего элемента в строка n . Таким образом, после этой строки j останется то же значение, и больше ничего не будет выполнено, то есть условие j будет True навсегда, следовательно, ваш бесконечный цикл. Теперь у вас есть варианты здесь:

— Вы можете добавить j+=1 в этот блок if .

— Вы можете добавить j+=1 вне всех блоков if и удалить его из других блоков if

Теперь есть некоторые логические проблемы, касающиеся некоторых опций. Я проведу рефакторинг вашего кода и исправлю проблемы. Кроме того, я настоятельно рекомендую вам использовать значимые имена переменных. Это поможет другим и вам (в будущем) понять и отладить ваш код.

Вам нужно всегда увеличивать j , иначе вы получите бесконечный цикл

Вы можете избежать такого рода ошибок, используя циклы for (по своей природе они менее подвержены бесконечному поведению), например:

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

Источник

оператор if / else внутри цикла while

Я написал код для игры, которая имитирует, как пользователь и компьютер бросают кость, и победитель получает 1 доллар от проигравшего, каждая из которых начинается с 2 долларов. Код работает нормально, но он не заканчивается, когда пользователь или компьютер достигают 0 $, как я ожидал. Какие-либо предложения?

Читайте также:  Как можно настроить роутер asus

5 ответов

Вы используете неправильное условие в инструкции while. Вы проверяете, имеет ли какой-либо игрок> = 0, это всегда будет проверять истину и вызовет бесконечный цикл. Вместо этого проверьте, имеет ли ОБЕИХ игроков> 0, и завершите игру, если нет.

Также у вас есть ‘;’ после вас, если заявление. Это приведет к тому, что код после него будет выполняться все время.

Вот полный рабочий код:

Причина проблемы:

Ваш цикл while вообще не запускается, поскольку условие внутри изначально оценивается как ложное.

Это гласит: пока у пользователя деньги меньше или равны 0 ИЛИ пока на компьютере деньги меньше или равны 0, запустите цикл while, это никогда не будет изначально истинным, поскольку и компьютер, и пользователь оба начать с $ 2, следовательно, userMoney == 2 и compMoney == 2.

Решение:

Измените условие цикла while на следующее:

Затем добавьте оператор if, который говорит, что если compMoney == 0 или если userMoney == 0, а затем выйти из цикла while.

Вы хотите остановиться, когда меньше или равно, но у вас больше или равно.

Во-первых, у вас проблема с вашими денежными значениями условия while = 2 для player и comp, поэтому while никогда не сработает . исправьте это, и вы можете использовать do while

Итак, внутри вашего do<> вы могли бы иметь свои утверждения и условия . поэтому он будет делать все, что находится внутри этих фигурных скобок, пока условие внутри while() не будет выполнено

Ваш оператор while проверяет 0. Цикл while никогда не сработает.

Источник

Объясните как работает if в цикле while

Добрый день. Мне не совсем понятно как работает строка кода где инструкция if, а именно почему почему срабатывает continue, если поставить != 0, но если поставить допустим != 5, код не работает вовсе хотя допустим при делении 9/5 будет 4.5, т.е. остаток 5 и цикл должен закончиться и вывести число 9. Если не понятно, что я написала, то просто объясните как работает эта строка

P.S. я только изучаю Python и не совсем понимаю его логику

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Читайте также:  Сломался ик приемник телевизора

Объясните, как работает эта программа, а именно знак равенства (==) в цикле While
Всем привет! Извиняюсь за глупый вопрос, недавно начал учить Си. Объясните как работает это.

Как работает рекурсия в цикле
Всем привет! Подскажите пожалуйста как работает рекурсия в цикле, типа вот такого bool test(long.

Объясните как работает
Всем привет! Я только полгода в программировании и Delphi. Недавно с другом лекцию слушали по.

Объясните как работает
Здравствуйте, объясните пожалуйста поэтапно, как работают данные коды 1) nl -bp’^H’ -s’^’.

Решение

Так же везде , где проверяется условие на предмет, оно True или False, нужно помнить, что любой не пустой объект в питон эквивалентен True, а любой пустой объект и так же число 0, это False
Поэтому в любом условии, где ожидается булев объект мы получим:
1 — True
не пустая строка, список, кортеж, словарь, множество, экземпляр класса и т.д. — True
0 — False
» (пустая строка) — False
[] — False
<> — False
() — False (пустой кортеж)
и т.д.

Добавлено через 32 минуты
В питоне % является оператором деления по модулю и по определению возвращает остаток от деления.
9%5 эквивалентно (5+4) разделить на 5 . Будет 1 целая и 4 в остатке. Так вот, операция деления по модуля возвращает не целое от деления, а только остаток. Поэтому:

Объясните как работает this -> и ->
Как написано в книжке this — это указатель на экземпляр класса. Что происходит в данных.

Объясните как работает %
Искал в интернете, но про % очень скудно написано. Знаю только,что используется для деления с.

объясните как работает?
controller = < left:false, right:false, up:false, keyListener:function(event).

Объясните где ошибка в цикле
дан массив w= <2,3,6,13,27,52>и значение r=9, необходимо занести в массив orig1, элементы сумма.

Объясните, что происходит в цикле?
Ребят, я не силен в питоне. Можете добавить комменты к этому куску кода h := 0 for each c in W.

Объясните, как работает программа
Какой здесь метод сортировки? const n=15; var a:array of integer; i,j,x:integer; begin.

Источник

Почему не работает if в while-e?

Не могу понять, почему при вводе имени сразу же говорится «число больше»/»число меньше», хотя сперва должно выводиться «Привет, . «. В условии указано, что name === null и так и есть.
Также хотелось бы задать небольшой вопрос: как сделать, чтобы после ввода имени не выводилось «число больше»/»число меньше»? То есть алгоритм принимает введенное имя за попытку угадать число, мне нужно сделать чтобы функция как бы подождала один ввод перед выполнением следующего if-a.

  • Вопрос задан 07 дек. 2020
  • 82 просмотра
Читайте также:  Hp laserjet pro mfp m127fw сканер не работает

Попробуйте пройти свой скрипт пошагово и разобраться, что происходит на каждом шаге.
Цикл while бесполезен, Вы в любом случае из него выйдите на первой же итерации
Условие name !== null всегда будет истинно, когда выполнение дойдет до него, следовательно оно тоже бесполезно

Не могу понять, почему при вводе имени сразу же говорится

Если код выполняется в глобальной области видимости, то переменная name уже присутствует в объекте window. Вызывая name = null, внутри на самом деле будет строка «null», и поэтому оно не проходит проверку в первом условии, и проходит во втором.

Поиграйтесь в консоли с window.name, увидите что там всегда строка, что бы вы не присвоили ей.

Рекомендую код обернуть в IIFE (если подходит), должно заработать.

Источник

Как использовать операторы if и if-else внутри циклов while

Как я должен использовать if а также else заявления внутри while циклы в C ++? Я не уверен, что я делаю неправильно. Я думаю, что это может иметь какое-то отношение к float переменные, или, возможно, это где код после while петля.

Решение

Бедные качество кода, вы слышали о стиль кода ? Комментарии ?
Вы запустили код?
Я дам вам совет, после написания фрагмента кода, перед компиляцией прочитайте его снизу вверх, это поможет вам обнаружить проблемы, подобные этой:
Первый индекс массива всегда равен 0 .
Итак 3-е значение в массиве имеет 2 в качестве индекса
=> так технически:

Сгенерирует ошибку. Чтобы это исправить, вы должны написать:

Другие решения

Слишком много кода, но я обнаружил одну проблему …
Ваш массив состоит из 3 членов.

float FEnemyPos[3] = < 15.1f, 30.1f, 50.1f >; но вы используете его из индекса 1 и переходите к индексу 3.

Вы должны изменить это, как показано ниже, потому что у вас нет ничего в вашем массиве по индексу 3, это неверный доступ к памяти, когда вы пытаетесь получить к нему доступ.

Вы могли бы значительно сократить код!

  • Вы можете использовать список строк вместо массива символов
  • Вы могли бы использовать меньше переменных
  • if / else может быть сокращено

также основная проблема в том, что индекс всегда начинается с 0

Источник

Оцените статью