0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
1

Как работает код?

15.02.2020, 20:24. Показов 1376. Ответов 16
Метки нет (Все метки)

Задание: Определить, что выведет программа.
Код выводит:
1
2
3
4
Всё!
#Почему выводится это? Ведь указан шаг "2", значит должно выводить значения через раз. Т.е.: 1 3 (5 скипается) Всё!
Python
1
2
3
4
5
6
7
8
9
10
a=0
n=10
for i in range(1,n+1,2):
    a=a+1
    if a==5:
        continue
    print (a)
    if a==7:
        break
print ("Всё!")
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2020, 20:24
Ответы с готовыми решениями:

Код написан в Dev C. Не работает в Visual. Как нужно переделать код?
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт...

Код выполняемый из студии с пометкой debag, работает не так как уже компилированный код
Здравствуйте, столкнулся с такой проблемой. Код выполняемый из студии с пометкой debag, работает не...

Как работает код
Помогите разобраться в чужом коде (практические навыки в прологе отсутствуют полностью). Особенно...

Как работает код?
while (!(cin >> a) || (cin.peek() != '\n')) { cin.clear(); while (cin.get() != '\n') ...

16
1282 / 667 / 365
Регистрация: 07.01.2019
Сообщений: 2,176
15.02.2020, 20:32 2
Цитата Сообщение от ebalor Посмотреть сообщение
Почему выводится это? Ведь указан шаг "2", значит должно выводить значения через раз. Т.е.: 1 3 (5 скипается) Всё!
Цикл по переменной i, а выводите на экран переменную a
0
Модератор
Эксперт Python
1350 / 647 / 206
Регистрация: 23.03.2014
Сообщений: 3,049
15.02.2020, 20:42 3
ebalor, это потому, что
Python
1
 continue
Добавлено через 39 секунд
вот так работает
https://pythonworld.ru/osnovy/... -else.html

Добавлено через 3 минуты
На словах, сие выглядит так: continue на шаге, где он поставлен, обрывает цикл и переходит к след условию)(визуально - вывод слова "все!",если сумма достигнет 5, а 5 она достигнает )

Добавлено через 1 минуту
Цитата Сообщение от tooru Посмотреть сообщение
Цикл по переменной i,
обрыается по условию работы continue

Добавлено через 1 минуту
и дальше проверяется именно значение а
0
1282 / 667 / 365
Регистрация: 07.01.2019
Сообщений: 2,176
15.02.2020, 20:45 4
Цитата Сообщение от Dax Посмотреть сообщение
continue на шаге, где он поставлен, обрывает цикл и переходит к след условию
continue переходит на следующую итерацию цикла, i+1, а цикл завершается, так как в нем всего 5 шагов
0
Модератор
Эксперт Python
1350 / 647 / 206
Регистрация: 23.03.2014
Сообщений: 3,049
15.02.2020, 20:48 5
tooru, Ваша правда
0
0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
15.02.2020, 20:55  [ТС] 6
Я ничего не понял(
0
Эксперт Python
5399 / 3823 / 1213
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
15.02.2020, 21:32 7
Цитата Сообщение от ebalor Посмотреть сообщение
Я ничего не понял
Не используй счетчики. Для этого есть enumerate.
Python
1
2
3
4
5
6
7
>>> list(enumerate(range(1,10+1,2)))
[(0, 1), (1, 3), (2, 5), (3, 7), (4, 9)]
>>>
>>> # для отсчета с 1
>>> list(enumerate(range(1,10+1,2),1))
[(1, 1), (2, 3), (3, 5), (4, 7), (5, 9)]
>>>
То есть при значении счетчика равном 5 цикл находится на последней итерации. Это и есть "Все".
И поскольку инструкцией continue ты не даешь нормально завершиться итерации - последнее значение не выводится.
0
0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
15.02.2020, 22:13  [ТС] 8
Так. Я более менее понял почему выводятся 1234, но не понял, почему не выводятся 6 и 7. "Если а==5, то скипается". А с 6 и 7?
0
1724 / 964 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
15.02.2020, 22:45 9
Garry Galler, Здесь не ставится задача решить по некоторому условию. А ТС просит объяснит как работает код который он выложил и где используется range, а не enumerate, хотя последний и эффективнее. То есть, как я понимаю, он просит сделать разбор его кода. А так, как использование range не является ошибкой, то не стоит заставлять его переходить на enumerate.
ebalor, , Задание дурацкое, а почему так происходит вам объяснил tooru.
Смысл этого кода, как я его понимаю, выводить порядковый номер цикла (порядковый номер шага цикла) 1 2 3 4, порядковый номер шага 5 пропустить с помощью continue и на шаге 7 закончить цикл. При этом пример показывает, что переменная цикла, в данном случае i, это не то же самое, что и шаг цикла. Переменная цикла прыгает через раз, 1 3 5 7, а шаги цикла демонстрирует переменная "а" 1 2 3 4.
Пример кто то придумывал с больной фантазией, он не поясняет разницу между переменной цикла и шагом цикла, а наоборот запутывает учащегося.

Добавлено через 11 минут
ebalor, На шаге 5 (где кстати переменная цикла равна 7) действительно скип.

Добавлено через 19 минут
А шестого шага а=6 уже нет, так как i=11 ,быть не может( максимальное i=9 а 9+2 (11) выходит за диапазон переменной i, который от 1 до 9. И программа выходит из цикла и печатает "Все!"
Строки 8 и 9
if a==7:
break
вообще здесь лишние, никогда не работают, и служат только для того, что бы запутать учащегося.
1
0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
15.02.2020, 22:46  [ТС] 10
а = 1 i = 1
a = 2 i = 3
a = 3 i = 5
a = 4 i = 7
a = 5 (скип по условию) i = 9
a = 6 i = 11 # на этом моменте конец промежутка i
Почему дальше выводится Всё! при а==7 и не выводится 6, если она входит в промежуток?
0
1724 / 964 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
15.02.2020, 22:47 11
Я говорю идиотский код. Сделан как ловушка для тестируемого ученика.
0
1282 / 667 / 365
Регистрация: 07.01.2019
Сообщений: 2,176
15.02.2020, 22:49 12
Цитата Сообщение от ebalor Посмотреть сообщение
a = 6 i = 11 # на этом моменте конец промежутка i
Почему дальше выводится Всё! при а==7 и не выводится 6, если она входит в промежуток?
range не включает последнюю цифру интервала, он только до 10, поэтому после i = 9 цикл прерывается
0
1724 / 964 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
15.02.2020, 22:54 13
Лучший ответ Сообщение было отмечено ebalor как решение

Решение

Цитата Сообщение от ebalor Посмотреть сообщение
Почему дальше выводится Всё! при а==7 и не выводится 6, если она входит в промежуток?
потому, что промежуток для "i", а не для "а". Я выше написал почему при "а" равном 6 выходит из цикла и не печатает 6, а печатает Все!

Добавлено через 2 минуты
До а==7 вообще не доходит, так как на а ==6 уже выходит из цикла, и пишет Все!
1
0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
15.02.2020, 23:05  [ТС] 14
Получается до второго условия "а" может и не доходить, чтобы выполнить его? а==6 все равно выполнит его, так как последующих не существует?
Ля. Не проще было поставить else: break ?
0
1724 / 964 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
15.02.2020, 23:16 15
Да, до второго условия никогда не доходит. Код дурацкий и служит только для того, что бы запутать того, кто его читает.
0
0 / 0 / 0
Регистрация: 14.02.2020
Сообщений: 11
15.02.2020, 23:23  [ТС] 16
Большое спасибо вам всем за то, что помогли разобраться! <3
0
Эксперт Python
5399 / 3823 / 1213
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
16.02.2020, 00:12 17
Цитата Сообщение от Viktorrus Посмотреть сообщение
почему при "а" равном 6 выходит из цикла
Код завершает итерацию когда a == 5, i==9. И это его самый последний шаг. При это 5 не выводится.
Код
1
2
3
4
continue
Всё!
Без continue был бы просто вывод последнего значения a==5, то есть итерация дошла бы нормального завершения последнего шага.
А break и вовсе никогда недостижим при таком диапазоне range.
Весь код - одно сплошное недоразумение. А все потому, что люди не пользуются встроенными функциями и придумывают всякую ерунду.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2020, 00:12
Помогаю со студенческими работами здесь

Как работает код
С main вроде все понятно, а что дальше происходит? #include &lt;stdio.h&gt; int main(int t,int...

Как работает код
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Как работает код?
'use strict'; let messages = { &quot;Hello, {0}!&quot;: &quot;Привет, {0}!&quot; }; function i18n(strings,...

как работает код
Объясните как работает код &lt;?php if($_SERVER=='index.php'){ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru