Tässä esimerkissä lasketaan avaruuskappaleiden tilavuuksien erotuksia. Laskeminen hoidetaan funktioilla, jotka laskevat pohjan pinta-alan, kappaleiden tilavuuden ja verrannosta saatavan korkeuden ja pituuden. Ohjelma kykenee laskemaan lieriön ja kartion/pyramidin tilavuuden pohjana toimii joko ympyrä tai neliö. Verrannon avulla voidaan laskea pienemmän kappaleen korkeus tai pituus. Lisäksi ohjelma kykenee laskemaan korkeuden sivujanan kautta, kun kyseessä on kartio tai pyramidi.
Kun tarvittavat laskut on suoritettu, näytetään kappaleen tiedot (pohjan ja kappaleen tyypi) ja näytetään kappaleiden tilavuuksien erotus.
Lisäyksenä tähän ohjelma laskee myös tilavuuden valmiiksi annetun pinta-alan kautta, kun kyseessä on lieriö/särmiö tai kartio/pyramidi sekä pallon tilavuuden (pallolla ei ole pohjaa).
import math
def Tilavuus(pinta_ala,korkeus,tyyppi):
tilavuus = 0.0
if (tyyppi == 1):
#Lieriö
tilavuus = pinta_ala*korkeus
elif (tyyppi == 2):
#Kartio
tilavuus = (1/3.0)*pinta_ala*korkeus
elif (tyyppi == 3):
#Pallo
tilavuus = (4/3.0)*math.pi*korkeus**3
return tilavuus
def PohjanPintaAla(pituus,korkeus,tyyppi,tyyppi_kappale,pa):
pinta_ala = 0.0
#Lasketaan valitun tai valmiiksi annetun pohjan pinta-ala
if (tyyppi == 1):
#Neliö
pinta_ala = pituus**2
elif (tyyppi == 2):
#Ympyrä
pinta_ala = math.pi*pituus**2
elif (tyyppi == 3):
#Valmis pinta-ala
pinta_ala = pa
return Tilavuus(pinta_ala,korkeus,tyyppi_kappale)
def Verranto(pituus,pituus_pienempi,korkeus,korkeus_pienempi):
if (pituus_pienempi == 0):
tulos = pituus*korkeus_pienempi/korkeus
elif (korkeus_pienempi == 0):
tulos = pituus_pienempi*korkeus/pituus
return tulos
#Ohjelmassa on kolme erityyppistä avaruuskappaletta (lieriö/särmiö, kartio/pyramidi ja pallo)
#Ohjelmassa on kaksi erityyppistä pohjaa (neliö ja ympyrä)
#Pallolla ei ole pohjaa
jatko = 1
while jatko == 1:
#Pituus voi olla joko neliön sivun pituus tai ympyrän säde
#Korkeus voi olla joko kappaleen korkeus tai kartion/pyramidin sivujana
print("Anna pituus")
pituus = float(input())
print("Anna korkeus")
korkeus = float(input())
print("Anna pohjantyyppi 1) Neliö 2) Ymypyrä 3) Valmis pohja")
tyyppi = int(input())
print("Anna kappaleen tyyppi 1) Lieriö/Särmiö 2) Kartio/Pyramidi 3) Pallo")
tyyppi_kappale = int(input())
valinta = 0
if (tyyppi_kappale == 2):
print("Onko korkeus sivujanan pituus 1) Kyllä")
valinta = int(input())
if (valinta == 1):
if (tyyppi == 1):
korkeus = math.sqrt(korkeus**2-(pituus/2)**2)
elif (tyyppi == 2):
korkeus = math.sqrt(korkeus**2-pituus**2)
#Pienempi kappale
valinta_pienempi = 0
pituus_pienempi = 0.0
korkeus_pienempi = 0.0
if (tyyppi == 1 or tyyppi == 2):
print("Valitse pienempi 1) korkeus 2) pituus")
valinta_pienempi = int(input())
if (tyyppi_kappale == 1 or tyyppi_kappale == 2):
if (valinta_pienempi == 1):
while (pituus_pienempi <= 0 or pituus_pienempi >= pituus):
print("Anna pituus")
pituus_pienempi = float(input())
korkeus_pienempi = Verranto(pituus,korkeus,pituus_pienempi,0.0)
elif (valinta_pienempi == 2):
while (korkeus_pienempi <= 0 or korkeus_pienempi >= korkeus):
print("Anna korkeus")
korkeus_pienempi = float(input())
pituus_pienempi = Verranto(pituus,korkeus,0.0,korkeus_pienempi)
elif (tyyppi_kappale == 3):
while (korkeus_pienempi <= 0 or korkeus_pienempi >= korkeus):
print("Anna pallon säde")
korkeus_pienempi = float(input())
pa = 0.0
if (tyyppi == 3):
print("Anna valmiiksi lasketun pohjan pinta-ala")
pa = float(input())
print("Kappale:", end="")
if (tyyppi_kappale == 1):
print("Lieriö")
elif (tyyppi_kappale == 2):
print("Kartio")
print("Pohja:", end="")
if (tyyppi == 1):
print("Neliö")
elif (tyyppi == 2):
print("Ympyrä")
#Lasketaan molempien kappaleiden tilavuuksien erotus.
if (tyyppi_kappale == 1 or tyyppi_kappale == 2):
print("Tilavuus:",PohjanPintaAla(pituus,korkeus,tyyppi,tyyppi_kappale,pa)-PohjanPintaAla(pituus_pienempi,korkeus_pienempi,tyyppi,tyyppi_kappale,pa))
elif (tyyppi_kappale == 3):
print("Tilavuus:", Tilavuus(0.0,korkeus,3)-Tilavuus(0.0,korkeus_pienempi,3))
print("Jatketaanko 1) Kyllä")
jatko = int(input())Aihe on jo aika vanha, joten et voi enää vastata siihen.