1

(1 відповідей, залишених у Python)

Задача «Шеренга»
Умова
Петрик перейшов в нову школу. На занятті з фізкультури йому знадобилось визначити своє місце в  шерензі.
Програма отримує на вхід не зростаючу послідовність натуральних чисел, кожне  з яких відповідає за зріст учня в шерензі.
Після цього вводиться число х - зріст  Петрика. Всі числа у вхідних даних не більші ніж 200.
Потрібно вивести номер, під яким Петрик повинен стати в шеренгу.
Якщо в шерензі є люди з однаковим зростом, таким же як у Петрика, то він повинен стати після них.

Розвязок:

a=[int(s) for s in input().split()]
x=int(input())
index=len(a)+1
for i in range(len(a)):
    if x>a[i]:
        index=i+1
        break
print(index)

Не розумію, що відбувається в циклі, поясніть будь-ласка.

Дякую всім за витрачений час і пояснення. Все зрозуміло.

P.Y. написав:

Питання стосується кортежного присвоєння (tuple assignment). Воно робить приблизно те ж саме, що декілька присвоєнь, але є відмінності.

a,b = 0,1

можна переписати як

a=0
b=1

але це простий випадок, де змінні з лівої частини не з'являються у правій, тому не впливають на результат. Насправді ж там відбуваються трохи складніші дії:

tmp=(0, 1) # тимчасова змінна, якій присвоюється кортеж. Дужки необов'язкові: tmp=0, 1 працюватиме так само.
a=tmp[0]
b=tmp[1]

Тобто, спершу обчислюється вся права частина виразу й записується в тимчасову змінну, потім з неї по порядку вибираються значення й записуються у змінні в лівій частині виразу. В цьому випаддку, на результат це не впливає, але ось у наступному це вже треба враховувати.

a, b = b, a + b

можна переписати лише так:

tmp= b, a+b
a=tmp[0]
b=tmp[1] 

Просто запис з кортежним присвоєнням коротший, тому в мовах, де він є, частіше використовують його.

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

a=b     # старе значення змінної a стирається раніше, ніж треба, тому наступний рядок
b=a+b  # робитиме те ж саме, що b=b+b

Також кортежне присвоєння часто використовують, щоб обміняти значення двох змінних:

x=10
y=20
print('x =', x, ' y =', y) # виведе x = 10 y = 20
x,y = y,x # обмін
print('x =', x, ' y =', y) # виведе x = 20 y = 10

Без нього, обмін довелося б робити з використанням тимчасової змінної:

tmp=y,x
x=tmp[0]
y=tmp[1]

Або так:

tmp=y
y=x
x=tmp

Кортежне присвоєння дозволяє записати це коротше й інтуїтивно зрозуміліше.

koala написав:

Власне, у вас є два рядки з однаковим присвоюванням:

a, b = 0, 1

та

a, b = b, a + b

Другий трохи заплутаніший, але принцип той самий. Про всяк випадок - це зветься "деструктуризацією" (destructuring), бо структура даних (у ньому випадку кортеж) розкладається по змінних.

Дуже дякую за відповідь, вникаю.

mamkin haker написав:

#щас пофікшу
koala уже замість мене написав, дякю йому :3

Дуже дякую за відповідь.

Завдання:
За заданим числом n (номер числа) у послідовності Фібоначчі потрібно визначити значення цього числа.

Послідовність Фібоначчі:
Закономірність чисел, які при постановці в ряд утворюють лінію цифр, кожна з яких є сумою двох попередніх чисел.
Іншими словами, послідовність Фібоначчі виглядає так: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 і так далі.

Розв'язок задачі:

n = int(input())
if n == 0:
    print(0)
else:
    a, b = 0, 1
    for i in range(2, n + 1):
        a, b = b, a + b
    print(b)

Я не можу зрозуміти як працює цикл For у цій програмі. Зрозуміло, якщо є одна змінна в інших програмах, але якщо дві, a  і  b. Функція range генерує значення чисел від двійки до n + 1, не зрозуміло, як ці числа присвоюються змінним a і b.

7

(0 відповідей, залишених у Python)

Доброго дня! Можливо хтось має досвід проходження курсів (заняття з ментором) Python від Foxmind, поділіться своїми враженнями будь-ласка, чи вартують вони уваги?

8

(2 відповідей, залишених у Python)

Дякую, тепер зрозумів)

9

(2 відповідей, залишених у Python)

Не можу зрозуміти, як працює ця програма, чому результат 3?

x = True
y = False
z = False
if not x or y:
    print(1)
elif not x or not y and z:
    print(2)
elif not x or y or not y and x:
    print(3)
else:
    print(4)