1.5.9. Trójkąt¶
ZADANIE: Napisz program, który na podstawie danych pobranych od użytkownika, czyli długości boków, sprawdza, czy da się zbudować trójkąt i czy jest to trójkąt prostokątny. Jeżeli da się zbudować trójkąt, należy wydrukować jego obwód i pole, w przeciwnym wypadku komunikat, że nie da się utworzyć trójkąta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #! /usr/bin/env python
# -*- coding: utf-8 -*-
import math # dołączamy bibliotekę matematyczną
op = "t" # deklarujemy i inicjujemy zmienną pomocniczą
while op != "n": # dopóki wartość zmiennej op jest inna niż znak "n"
a, b, c = input("Podaj 3 boki trójkąta (oddzielone przecinkami): ")
# alternatywna forma pobrania danych
# a, b, c = [int(x) for x in raw_input(
# "Podaj 3 boki trójkąta (oddzielone spacjami): ").split()]
if a + b > c and a + c > b and b + c > a: # warunek złożony
print "Z podanych boków można zbudować trójkąt."
# czy boki spełniają warunki trójkąta prostokątnego?
if (a**2 + b**2 == c**2 or
a**2 + c**2 == b**2 or
b**2 + c**2 == a**2):
print "Do tego prostokątny!"
# na wyjściu możemy wyprowadzać wyrażenia
print "Obwód wynosi:", (a + b + c)
p = 0.5 * (a + b + c) # obliczmy współczynnik wzoru Herona
# liczymy pole ze wzoru Herona
P = math.sqrt(p * (p - a) * (p - b) * (p - c))
print "Pole wynosi:", P
op = "n" # ustawiamy zmienną na "n", aby wyjść z pętli while
else:
print "Z podanych odcinków nie można utworzyć trójkąta prostokątnego."
op = raw_input("Spróbujesz jeszcze raz (t/n): ")
print "Do zobaczenia..."
|
Pętla while
wykonuje się dopóki warunek jest prawdziwy, czyli zmienna kontrolna “op” różna jest od “n”. Dzięki temu użytkownik może wielokrotnie wprowadzać wartości boków tworzące trójkąt.
Są dwie metody pobierania kilku wartości z wejścia (np. klawiatury) na raz.
Funkcja raw_input()
zwraca wprowadzone dane zakończone nową linią jako napis.
Funkcja input()
wartości pobrane z wejścia (np. klawiatury) traktuje jak kod Pythona.
Konstrukcja int(x) for x in raw_input().split()
(przykład tzw. wyrażenia listowego) wywołuje funkcję int()
, która
usiłuje przekształcić podaną wartość na liczbę całkowitą dla każdej
wartości wyodrębnionej z ciągu wejściowego przez funkcję split()
. Separatorem
kolejnych wartości są dla funkcji split()
białe znaki (spacje, tabulatory).
Funkcja input()
pobiera wejście w postaci napisu, ale próbuje zinterpretować go
jakby był częścią kodu w Pythonie. Dlatego dane oddzielone przecinkami w postaci
np. “1, 2, 3” przypisywane są podanym zmiennym.
Funkcje if
sprawdzają warunki złożone oparte na koniunkcji (and
) i alternatywie (or
).
Wyrażenie x**y
oznacza podnoszenie podstawy x
do potęgi y
.
Funkcja sqrt()
(pierwiastek kwadratowy) zawarta jest w module math
, który na początku
programu trzeba zaimportować.
1.5.9.1. Zadania dodatkowe¶
Zmień program tak, aby użytkownik w przypadku podania boków, z których trójkąta zbudować się nie da, mógł spróbować kolejny raz.
Materiały Python 101
udostępniane przez
Centrum Edukacji Obywatelskiej na licencji
Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.
Utworzony: | 2017-09-08 o 19:38 w Sphinx 1.4.5 |
---|---|
Autorzy: | Patrz plik “Autorzy” |