121 Востаннє редагувалося koala (31.01.2018 20:32:15)

Re: Потрібна допомога

Найпростіший вираз для перевірки, чи можуть a,b,c сторонами трикутника:

abs(a-b)<c<a+b

Як його отримати:
нам потрібно, щоб виконувалося a<b+c, b<a+c та c<a+b. Третій вираз ми бачимо в правій частині. В двох інших винесемо c:
c>b-a
c>a-b
Очевидно, що з чисел (a-b,b-a) хоча б одне буде невід'ємним, і є сенс порівнювати лише із ним:
c>|a-b|.
Отже, маємо c<a+b і c>|a-b|. Суміщаємо і отримуємо наш вираз.

triangles = int(input())
for _ in range(triangles): #нам не потрібен номер ітерації
    [a,b,c] = int(x) for x in input().split()
    print(1 if abs(a-b)<c<a+b else 0, end=' ')

В принципі, перші 2 рядки теж можна сумістити майже без втрати читаності.

А ваша помилка, швидше за все, в тому, що ви > замість >= поставили. Якщо у "трикутника" сторони 2,3,5, то це не трикутник.

Подякували: leofun01, Eff1c2

122

Re: Потрібна допомога

koala написав:
triangles = int(input())
for _ in range(triangles): #нам не потрібен номер ітерації
    [a,b,c] = int(x) for x in input().split()
    print(1 if abs(a-b)<c<a+b else 0, end=' ')

Але print треба робити після циклу, а не всередині.

koala написав:

А ваша помилка, швидше за все, в тому, що ви > замість >= поставили. Якщо у "трикутника" сторони 2,3,5, то це не трикутник.

Я вже хотів писати, що це трикутник, але на всякий випадок заглянув до вікі і ...

wiki написав:

трьох точок, що не лежать на одній прямій

мені соромно за людство.

123

Re: Потрібна допомога

koala написав:

Найпростіший вираз для перевірки, чи можуть a,b,c сторонами трикутника:

abs(a-b)<c<a+b

Як його отримати:
нам потрібно, щоб виконувалося a<b+c, b<a+c та c<a+b. Третій вираз ми бачимо в правій частині. В двох інших винесемо c:
c>b-a
c>a-b
Очевидно, що з чисел (a-b,b-a) хоча б одне буде невід'ємним, і є сенс порівнювати лише із ним:
c>|a-b|.
Отже, маємо c<a+b і c>|a-b|. Суміщаємо і отримуємо наш вираз.

triangles = int(input())
for _ in range(triangles): #нам не потрібен номер ітерації
    [a,b,c] = int(x) for x in input().split()
    print(1 if abs(a-b)<c<a+b else 0, end=' ')

В принципі, перші 2 рядки теж можна сумістити майже без втрати читаності.

А ваша помилка, швидше за все, в тому, що ви > замість >= поставили. Якщо у "трикутника" сторони 2,3,5, то це не трикутник.

Дякую, хоч я і не до кінця зрозумів ваш код.
А на рахунок трикутника з нульовою площею, то так було написано в завданні. Я також думав, що це помилка, тому провіряв і так і так, але обидві спроби були невдалими.

leofun01 написав:

мені соромно за людство.

Прочитайте уважніше умову, а тоді вже соромтеся :)

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

124

Re: Потрібна допомога

Правда ваша. Ну що ж, всі помиляються, я не виняток. А що саме не зрозуміло?

125

Re: Потрібна допомога

koala написав:

Правда ваша. Ну що ж, всі помиляються, я не виняток. А що саме не зрозуміло?

Буває ;)
Мені трохи незрозумілий ось цей рядок

print(1 if abs(a-b)<c<a+b else 0, end=' ')

Я просто до цього ні разу не бачив функцій if, else в одному рядку (окрім як в ваших повідомленнях :) ), тому трохи не ясно я воно працює.

126

Re: Потрібна допомога

В Python є пара зручних скорочень. Якщо треба зробити

if умова:
  variable = значення1
else:
  variable = значення2

то можна написати просто

variable = значення1 if умова else значення2

Трохи змінюється послідовність виразів (значення1 іде перед if), зате дуже схоже на математичний запис.
У циклів є дещо схожа конструкція - генераторний вираз

(щось for змінна in ітератор)

Така конструкція дозволяє одразу створювати списки:

arr = int(x) for x in input().split()

Якщо якісь значення в генераторному виразі треба відфільтрувати, то треба додати if:

arr = int(x) for x in input().split() if int(x)%2==0

залишить лише парні значення.
Ну і нарешті треба сказати про деконструкцію:

[a,b,c]=arr

каже, що список arr треба розкласти на значення a,b і c (якщо в arr не 3 значення, буде помилка).
Іменований параметр end функції print задає символ, який треба виводити наприкінці, замість нового рядку.

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

127

Re: Потрібна допомога

Дуже дякую

128

Re: Потрібна допомога

koala написав:
triangles = int(input())
for _ in range(triangles): #нам не потрібен номер ітерації
    [a,b,c] = int(x) for x in input().split()
    print(1 if abs(a-b)<c<a+b else 0, end=' ')

Ось що вибиває  :)   

File "solution.py", line 4    [a,b,c] = int(x) for x in input().split()                       ^SyntaxError: invalid syntax

129

Re: Потрібна допомога

Так, вибачте.

[a,b,c] = [int(x) for x in input().split()]

чи навіть

a,b,c = [int(x) for x in input().split()]

Праворуч має бути список чи кортеж.

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

130

Re: Потрібна допомога

Дякую. Нарешті все запрацювало. А то більше години просидів, шукаючи свою помилку.

131 Востаннє редагувалося User 298 (04.02.2018 00:42:48)

Re: Потрібна допомога

Видалено: створіть окрему тему для своєї задачі.

132

Re: Потрібна допомога

Почав вивчати Python і мені потрібна допомога
створити програму обчислення коренів квадратного рівняння. задачу виконати у вигляді діалогу з уведеням набору коефіцієнтів за допомогою клавіатури

133 Востаннє редагувалося /KIT\ (08.07.2021 13:40:34)

Re: Потрібна допомога



134

Re: Потрібна допомога

vovaf14062000 написав:

Почав вивчати Python і мені потрібна допомога
створити програму обчислення коренів квадратного рівняння. задачу виконати у вигляді діалогу з уведеням набору коефіцієнтів за допомогою клавіатури

Краще б українську вивчили і правила прочитали.

135 Востаннє редагувалося Eff1c (20.09.2018 20:38:53)

Re: Потрібна допомога

Ну що ж, всім привіт :)  Давненько мене тут не було...
І в мене знов проблеми))
В даному випадку з розв'язком цієї задачі - https://www.e-olymp.com/uk/problems/2
Ось мій код

print(len(input()))


Проблема в тому, що для перевірки коду сайт дає кілька різних варіантів вхідних даних (в даному випадку 8 )
І 6 із 8 спроб закінчились успіхом, але інші 2...
В мене тільки одне припущення чому може бути помилка: в умові задачі вказано, що в вхідних даних "Одне ціле невід'ємне число n (0 ≤ n ≤ 2 ∙10^9)" і можливо, що ті 2 варіанта - дуже великі числа, які не можуть вміститися в максимальну довжину строки...Але це тільки припущення.
Цікаво почути ваші припущення на рахунок того, у чому може бути помилка і як її виправити.
Буду дуже вдячний ;)

136

Re: Потрібна допомога

>>> a="11 "
>>> int(a)
11
>>> len(a)
3

Не будьте розумнішими за умову. Сказано, що вводиться число - значить вводьте число.

Подякували: ping, leofun01, Eff1c3

137

Re: Потрібна допомога

До речі, ось вам ще одна задача: написати функцію, що приймає ціле число та повертає кількість символів у ньому без перетворення на стрічку.

138 Востаннє редагувалося ping (20.09.2018 21:41:12)

Re: Потрібна допомога

В мене тільки одне припущення чому може бути помилка: в умові задачі вказано, що в вхідних даних "Одне ціле невід'ємне число n (0 ≤ n ≤ 2 ∙10^9)" і можливо, що ті 2 варіанта - дуже великі числа, які не можуть вміститися в максимальну довжину строки...Але це тільки припущення.

все простіше.
https://i.imgur.com/8fWad0Ql.png

139

Re: Потрібна допомога

koala написав:
>>> a="11 "
>>> int(a)
11
>>> len(a)
3

Не будьте розумнішими за умову. Сказано, що вводиться число - значить вводьте число.

Дякую, виправив і все працює)

140

Re: Потрібна допомога

Наступна задача і знов проблеми...
https://www.e-olymp.com/uk/problems/3

n = int(input())
o = 12
for i in range(1, n):
    o = o + 8
print(o)

В чому може бути проблема?
З 13 перевірок - 2 правильні.