Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 8, 2020 10:35:50

sfunlimit
Зарегистрирован: 2020-06-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск - задача

Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.

Формат ввода
Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак ее окончания).

Формат вывода
Выведите ответ на задачу.
Sample Input:

1
7
9
0
Sample Output:

2

Сам я так и не смог осилить. Нагуглил ответ на Питошке.
Но так и не понял как программа рабоатет.

prev = int(input()) - ввод первой последовательности
answer = 0 - переменная равная 0
while prev != 0: - работать до тех пор пока не введут 0
next = int(input()) ввод данных второй последовательности
if next != 0 and prev < next: - если некст не равно нолю и второе меньше первого
answer += 1 переменная = переменная + 1
prev = next вторая = первая
print(answer)

Не пойму каким образом программа понимает что до него вводили 2 раза и почему не 3?
Почему выводить надо answer?

самое главное программа работает но я не понимаю как.

Объясните пожалуйста

Офлайн

#2 Окт. 8, 2020 10:44:44

sfunlimit
Зарегистрирован: 2020-06-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск - задача

Блин кажется дошло
Если
if next != 0 and prev < next: 1 и 7 это ансвер +1
7 и 9 ещё +1
Поэтому 2

Верно?

Офлайн

#3 Окт. 8, 2020 17:58:11

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Поиск - задача

 # -*- coding: utf-8 -*-
def main():
    num = []
    result = 0
    
    while True:
        tmp = [int(input(">> "))]
        
        if not tmp[0]:
            break
        
        if not len(num):
            num += tmp
        else:
            if num[-1] < tmp[0]:
                result += 1
            num += tmp
    
    print(f'итог {result} элементов больше предстоящих')
            
if __name__ == '__main__':
    main()



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 8, 2020 18:15:40)

Офлайн

#4 Окт. 8, 2020 18:08:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поиск - задача

AD0DE412
Что это?



Офлайн

#5 Окт. 8, 2020 18:10:25

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Поиск - задача

решение. что то не правильно?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 8, 2020 18:13:44)

Офлайн

#6 Окт. 8, 2020 18:20:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поиск - задача

AD0DE412
Правильность понятие относительное. Мне оно кажется, как бы так сказать толерантно… не совсем разумным

    
l = [1, 2, 4, 1, 2, 34, 0, 0, 3, 1]
result = 0
for i in range(len(l)-1, 0, -1):
    if l[i] > l[i-1]:
        result += 1
print(result)



Офлайн

#7 Окт. 8, 2020 18:28:23

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Поиск - задача

FishHook
не совсем разумным
ну тут не поспоришь
у меня последнее время в основном Си сложно переключаться (хотя это не опровдание конечно)



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 9, 2020 15:51:05)

Офлайн

#8 Окт. 9, 2020 01:56:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Поиск - задача

sfunlimit
Последовательность состоит из натуральных чисел и завершается числом 0.
  
>>> def f(lst):
...     assert lst, 'Should be non-empty'
...     assert lst[-1] == 0, 'Should end by zero'
...     out = 0
...     i = 0
...     while True:
...         if lst[i] == 0:
...             break
...         assert lst[i] > 0, 'Should be natural: ' + str(lst[i])
...         if i == 0:
...             pass
...         else:
...             out += lst[i] > lst[i - 1]
...         i += 1
...     return out
... 
>>> f([1, 2, 4, 1, 2, 34, 1, 1, 3, 1, 0])
5
>>> f([0])
0
>>> f([1, 0])
0
>>> f([1, 1, 0])
0
>>> f([2, 1, 0])
0
>>> f([1, 2, 0])
1
>>> 
>>> f([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
AssertionError: Should be non-empty
>>> 
>>> f([1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in f
AssertionError: Should end by zero
>>> 
>>> f([-1, 0])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 9, in f
AssertionError: Should be natural: -1
>>>
Утверждения (assert) ставятся, чтобы помнить про условия, для которых потом нужно будет допольнительно дописать проверки. Утверждения - это отладочный уровень, то есть они фигурируют только в debug-версии программы, так как их можно отключать.

Для любой последовательности
  
>>> def f(seq):
...     it = iter(seq)
...     out = 0
...     elem = next(it, None)
...     prev = elem
...     while elem is not None:
...         out += elem > prev
...         prev = elem
...         elem = next(it, None)
...     return out
... 
>>> 
>>> f([1, 2, 4, 1, 2, 34, 0, 0, 3, 1])
5
>>> f([])
0
>>> f([1])
0
>>> f([1, 1])
0
>>> f([2, 1])
0
>>> f([1, 2])
1
>>>



Отредактировано py.user.next (Окт. 9, 2020 02:19:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version