2 svar
93 visningar
våfflormedgrädde behöver inte mer hjälp
våfflormedgrädde 41
Postad: 12 sep 2022 17:39

Om man har en beräkning man ska göra en if sats. Ska man göra grov jobbet innan if satsen?

jag ska skriva in sidorna a,b och vinkeln theta för en triangel. Sidan c beräknas av formeln c=sqrt(a^2+b^2-2abcos(v)).

Sedan ska jag undersöka om sidorna är liksidiga, likbenta eller oliksidiga genom att skriva in värden för a,b och vinkeln.

Uppgiften vill att jag beräknar skillnaden mellan talen och undersöker om abs värdet är mindre än 10^10.

 

from cmath import cos
import math

sidaA = input('Längd sida a:')
a = float(sidaA)
sidaB = input('Längd sida b:')
b = float(sidaB)
Vinkeln = input('Vinkeln theta:')
v = float(Vinkeln)

c = math.sqrt(a**2+b**2-2*a*b*cos(v))


if (a-b < abs(10e-10)) and (b-c < abs(10e-10)) and (a-c < abs(10e-10))
print('Triangeln är liksidig')
else:
    print('ej liksidig')

 

Jag håller på att testa mig fram så jag skrev bara else och printa ej liksidig på sista raden.

Min if statement funkar inte och jag undrar om när man får dessa beräkningsuppgifter om man kan göra det så enkelt man kan för sig och "räkna ut innan" if vad man ska ha och sedan gör man en enkel if statement eller ska man ha med beräkningen i sin if statement.

CurtJ 1203
Postad: 12 sep 2022 19:00

Din if-sats saknar kolon och indentering och abs-funktionen ska användas på diffen a-b, a-c resp b-c.

 

Du KAN göra vilka beräkningar du vill i if-satsen men det är en bra vana att göra din kod lättläst och blir det för många komponenter i en if-sats så blir det gärna lite krångligt .Jag brukar undvika för många villkor genom att bryta ut villkoren i if-satsen i separata funktioner. I ditt fall skulle jag göra en funktion med namn som anger vad den gör. Jag skulle dessutom göra en funktion som jämför flyttal med den metod du använder.

ex:

 

def is_equal(a, b):
    return (abs(a - b) < 10e-10)


def equal_sides(a, b, c):
    return is_equal(a, b) and is_equal(b, c) and is_equal(a, c)

 

Då kan du sen skriva

if (equal_sides(sidA,sidB,sidC)):

vilket förmodligen är lättare att läsa

våfflormedgrädde 41
Postad: 13 sep 2022 13:10 Redigerad: 13 sep 2022 13:11
CurtJ skrev:

Din if-sats saknar kolon och indentering och abs-funktionen ska användas på diffen a-b, a-c resp b-c.

 

Du KAN göra vilka beräkningar du vill i if-satsen men det är en bra vana att göra din kod lättläst och blir det för många komponenter i en if-sats så blir det gärna lite krångligt .Jag brukar undvika för många villkor genom att bryta ut villkoren i if-satsen i separata funktioner. I ditt fall skulle jag göra en funktion med namn som anger vad den gör. Jag skulle dessutom göra en funktion som jämför flyttal med den metod du använder.

ex:

 

def is_equal(a, b):
    return (abs(a - b) < 10e-10)


def equal_sides(a, b, c):
    return is_equal(a, b) and is_equal(b, c) and is_equal(a, c)

 

Då kan du sen skriva

if (equal_sides(sidA,sidB,sidC)):

vilket förmodligen är lättare att läsa

Tusen tack!!

Jag såg småfelen när jag försökte kör koden.

 

min nya kod:

from cmath import cos
import math

sidaA = input('Längd sida a:')
a = float(sidaA)
sidaB = input('Längd sida b:')
b = float(sidaB)
Vinkeln = input('Vinkeln theta:')
v = float(Vinkeln)

c = math.sqrt(a**2+b**2-2*a*b*math.cos(v))

if abs(a-b) <= 10e-10 and abs(a-c) <= 10e-10 and abs(b-c) <= 10e-10:
    print('Triangeln är liksidig')
else:
    print('ej liksidig')

 

Nu funkar allt fin fint.

Svara
Close