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.

Kod nr
 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.


Licencja Creative Commons 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”