1 Востаннє редагувалося VertoX (05.04.2016 18:43:49)

Тема: Дитячий Python/Django

Створив цю тему, що б бородатим гуру за філіжанкою кави можна було релакснути відповідаючи (добровільно/при бажанні) на мої дитячі питання. Сприймайте це як типу ІТ-кросворд чи щось типу того. Любитель смайлу "рука-ліцо" і хто в школі був самим розумним,що неправильні відповіді інших доводили до сказу прохання одразу залишити цю тему, скоріш за все ви тут будете тільки розчаровуватись!
Отже є код

Прихований текст
print("Введіть ціле число, натисніть Enter для завершення; або просто Enter, щоб завершити")
total = 0
count = 0
while True:
    line = input("Ціле число: ")
    if line:
        try:
            number = int(line)
        except ValueError as err:
            print(err)
            continue
        total += number
        count += 1
    else:
        break
    if count:
        print("count =", count, "total =", total, "mean =", total / count)

Поясніть, будь ласка, як воно рахує?
Якщо від початку змінна  total =0, а я вводжу число 3, то судячи з цього  total += number, хіба не має виводити також 3?
Тьфу блін... Поки писав, сам розібрався і все зійшлось... Ну гаразд! Будемо вважати початок покладено!))

2

Re: Дитячий Python/Django

Прихований текст

Диятчий? (кілька разів перечитував, думав що то в мене вже перевтомлення)

3

Re: Дитячий Python/Django

Виправив! То в мене перевтомлення!

Подякували: Chemist-i1

4

Re: Дитячий Python/Django

а якщо так?
def inputNumber(str):
    while True:
        line = input(str)
        if not line:
            break
        try:
            number = int(line)
            yield number
        except ValueError as err:
            print(err)
    
print("Введіть ціле число, натисніть Enter для завершення; або просто Enter, щоб завершити")
nums = [x for x in inputNumber("Ціле число: ")]
if len(nums):
    print("count =", len(nums), "total =", sum(nums), "mean =", sum(nums) / len(nums))

5

Re: Дитячий Python/Django

koala написав:
а якщо так?
def inputNumber(str):
    while True:
        line = input(str)
        if not line:
            break
        try:
            number = int(line)
            yield number
        except ValueError as err:
            print(err)
    
print("Введіть ціле число, натисніть Enter для завершення; або просто Enter, щоб завершити")
nums = [x for x in inputNumber("Ціле число: ")]
if len(nums):
    print("count =", len(nums), "total =", sum(nums), "mean =", sum(nums) / len(nums))

Прикольно, допер навіть,що воно робе! Але є наступні запитання!
1. Що значить це слово - yield
2. len(nums) - я так розумію це функція?
Прога працює, але кривувато як на мене. Якщо користувач ввів 2 або > чисел то треба пропонувати натискати порожній Ентер! Бо спершу я просто вводив цифри, вводив, аж поки не набридло, аж потім на порожньому вводі воно порахувало!

6

Re: Дитячий Python/Django

Якщо зберегти файл з таким кодом:

Прихований текст
print("Введіть ціле число, натисніть Enter для завершення; або просто Enter чи ^D, щоб завершити")
total = 0
count = 0
while True:
    try:
        line = input("Ціле число: ")
        if line:
            number = int(line)
            total += number
            count += 1
    except ValueError as err:
            print(err)
            continue
    except EOFError:
        break
    if count:
        print("total =", total, "count =", count, "mean =", total / count)

Потім в терміналі виконати наступне:

Прихований текст

~/python3$ python3 5.py < 1.dat

Чому програма вирішує, що total це сумма всіх чисел в кожному рядку, а count це кількість тих рядків? За якою логікою це відбувається?

7

Re: Дитячий Python/Django

Ай, вибачте, не помітив - у вас вивід іде в циклі.
Звісно, ваш код правильніший з кількох точок зору, я просто теж Python вчу, от і експерементую.
yield (англ. "поступитися, виробити" - ага, ось така багатозначність) - замінник return, який залишає точку виконання в функції, і наступний виклик функції почнеться з наступного за yield рядка. Це дозволяє робити функції-генератори, які кожного разу повертають нове значення, і які можна використовувати як масиви генератори у виразах Python (доки вони не зроблять return).

Подякували: VertoX, leofun012

8

Re: Дитячий Python/Django

VertoX написав:

Якщо зберегти файл з таким кодом:

Прихований текст
print("Введіть ціле число, натисніть Enter для завершення; або просто Enter чи ^D, щоб завершити")
total = 0
count = 0
while True:
    try:
        line = input("Ціле число: ")
        if line:
            number = int(line)
            total += number
            count += 1
    except ValueError as err:
            print(err)
            continue
    except EOFError:
        break
    if count:
        print("total =", total, "count =", count, "mean =", total / count)

Потім в терміналі виконати наступне:

Прихований текст

~/python3$ python3 5.py < 1.dat

Чому програма вирішує, що total це сумма всіх чисел в кожному рядку, а count це кількість тих рядків? За якою логікою це відбувається?

Рядки 9, 10: total при кожному проході збільшується на щойно прочитане числове значення рядка, count — на 1.

Якщо точніше, порожні рядки та рядки, що не є записом числа, програма ігнорує: рядок 7 — порожній рядок сприймається як хибність, тому дії під if у цьому випадку не виконуються; рядки 5, 11 — здійснюється перехоплення виключень, і якщо в рядку 8 виявиться, що рядок неможливо перетворити на ціле число, виникає ValueError, що перекидає програму на рядки 11-13.

Цикл повторюється, доки у вхідному файлі є рядки, інакше виникає EOFError, після перехоплення якого здійснюється вихід із циклу (break).

Подякували: VertoX1

9

Re: Дитячий Python/Django

koala написав:

я просто теж Python вчу

Цікаво навіщо? Зустрічав багато Ваших коментарів в розділах Java, C++. Я так розумію,що Python це просто забавка в порівнянні з тими монстрами!

10

Re: Дитячий Python/Django

VertoX написав:
koala написав:

я просто теж Python вчу

Цікаво навіщо? Зустрічав багато Ваших коментарів в розділах Java, C++. Я так розумію,що Python це просто забавка в порівнянні з тими монстрами!

У Google, наприклад, майже уся розробка ведеться на С++ і Java, для фронтенда також використовують Javascript, а от юніт тести вони пишуть на Python. Ні, це не забавка :)

11

Re: Дитячий Python/Django

Yola написав:
VertoX написав:
koala написав:

я просто теж Python вчу

Цікаво навіщо? Зустрічав багато Ваших коментарів в розділах Java, C++. Я так розумію,що Python це просто забавка в порівнянні з тими монстрами!

У Google, наприклад, майже уся розробка ведеться на С++ і Java, для фронтенда також використовують Javascript, а от юніт тести вони пишуть на Python. Ні, це не забавка :)

А бекенд Youtube наприклад теж на Python.

12

Re: Дитячий Python/Django

Дядьки! Може це вже баян, але дивіться, що знайшов!

Прихований текст

P.S. Хочу об"єднати в цій темі Python/Django гуру,що б діймати їх дивакуватими питаннями! Хочу попередити,що не це не змушувати вас користуватись по-шукачем замість мене, просто цікавить як те чи інше працює саме в бойових умовах, а не в теорії! Яку до речі нУбУ не так вже й легко второпати!

13

Re: Дитячий Python/Django

Дядьки, є до вас два питання!
1. Для засвоєння матеріалу, а саме оператор while і цикл for...in, потребую завдань! Якщо в когось є такі завдання чи є змога/бажання придумати, прохання викласти сюди по 3шт на кожен! Було б ідеально якби їх складність йшла за нарощуванням!
2. Є проблема написання коду. Тобто якщо про задачу пояснять, або наштовхнуть на думку то все розумію,що і чому так, але без пояснення чи підказок самостійно писати код не вдається. Як побороти сєй нєдуг? Що б це не було сліпим копіпастом коду, а власні думки(правильні) реалізовані в тілі програми! Пан P.Y., порадив книжку яка написана задовго до Python-y, але може хто підкаже більш сучасне видання аналогічної - Н. Вірт — Алгоритми та структури даних?  Ну і бажано ваші методи боротьби з цим питанням у свій час!

14

Re: Дитячий Python/Django

VertoX написав:

Дядьки, є до вас два питання!
1. Для засвоєння матеріалу, а саме оператор while і цикл for...in, потребую завдань! Якщо в когось є такі завдання чи є змога/бажання придумати, прохання викласти сюди по 3шт на кожен! Було б ідеально якби їх складність йшла за нарощуванням!
2. Є проблема написання коду. Тобто якщо про задачу пояснять, або наштовхнуть на думку то все розумію,що і чому так, але без пояснення чи підказок самостійно писати код не вдається. Як побороти сєй нєдуг? Що б це не було сліпим копіпастом коду, а власні думки(правильні) реалізовані в тілі програми! Пан P.Y., порадив книжку яка написана задовго до Python-y, але може хто підкаже більш сучасне видання аналогічної - Н. Вірт — Алгоритми та структури даних?  Ну і бажано ваші методи боротьби з цим питанням у свій час!

1. VertoX зареєструйтесь на prometheus, не обов'язково проходити їхній курс, але там є купа задач на тому курсі... Для прикладу на цикли 4 задачки(це 4 урок). Але далі там також можна розв'язувати.

2. Тут нічого не порадиш. ТІЛЬКИ САМОМУ ПИСАТИ КОД. А далі вже якщо ну нічого не виходить - питайте. Але перше спробуйте самі.

Подякували: VertoX, leofun012

15

Re: Дитячий Python/Django

PS. Vertox ви ж хотіли ставивти питання по django? А тут тільки цикли???

16

Re: Дитячий Python/Django

VertoX написав:

Дядьки, є до вас два питання!
Є проблема написання коду. Тобто якщо про задачу пояснять, або наштовхнуть на думку то все розумію,що і чому так, але без пояснення чи підказок самостійно писати код не вдається. Як побороти сєй нєдуг? Що б це не було сліпим копіпастом коду, а власні думки(правильні) реалізовані в тілі програми! Пан P.Y., порадив книжку яка написана задовго до Python-y, але може хто підкаже більш сучасне видання аналогічної - Н. Вірт — Алгоритми та структури даних?  Ну і бажано ваші методи боротьби з цим питанням у свій час!

Починайте "вартится" в навколо-науковому інформаційному просторі, де програмування -- засіб розв'язання, завдань, а не мета. Почніть читати вумні науково-популярні книжки штибу Мартина Ґарднера. Прометеус поки сирий, я б не став по ньому вчитися, хоча я б не став вчитися і по тому, по чому вчився, тож вивчитися можна через що завгодно, аби бажання було.

Подякували: VertoX, anakin2

17

Re: Дитячий Python/Django

Q-bart написав:

PS. Vertox ви ж хотіли ставивти питання по django? А тут тільки цикли???

Прихований текст

VertoX = "Nooby"
VertoX_Django = "Developer"
if VertoX != VertoX_Django:
    print("А що по Вашому  розумного може запитати людина \nпро Django котра плутається в основах Python?")

0xDADA11C7 написав:

Починайте "вартится" в навколо-науковому інформаційному просторі, де програмування -- засіб розв'язання, завдань, а не мета. Почніть читати вумні науково-популярні книжки штибу Мартина Ґарднера. Прометеус поки сирий, я б не став по ньому вчитися, хоча я б не став вчитися і по тому, по чому вчився, тож вивчитися можна через що завгодно, аби бажання було.

Ну окрім цього форуму "варитися" більше нема де, тож щось то воно буде! Розвивати логіку програмування за допомогою математичних головоломок та завдань досить таки мудро! Дякую за пораду! Чи Ви хотіли,що б я його науково-фантастичну літературу читав? А про бажання погоджуюсь на 100%, без нього сама розумна і вдало написана книжка пройде мимо!

18

Re: Дитячий Python/Django

Я хочу щоби межа між науковою, науково-популярною та програмерською літературою в вашій голові стерлася, щоби ви відчули смак програмування та красу математики з гомосексуалізмом Алана Тюринга та фошизмом Томаса Вотсона

Подякували: leofun011

19

Re: Дитячий Python/Django

Схоже багатенько доведеться читати,що б стерти ту саму межу! Або просто навчитись писати код!

20

Re: Дитячий Python/Django

Заучувати не треба, досить знати де шукати. Копіпаст не зло, якщо ви його розумієте. На практиці, усім пофігу що і як ви там понаписували якщо воно справно робить (тим паче на python).
"Досить спроб. Просто бий.".