Ekvation på python
Hej, har en fråga som jag skulle vilja lösa på python men det går inte bra. Jag vill få fram alla heltalsvärden på n som uppfylls av ekvationen. Så här ser min kod ut:
Men förstår inte varför det blir fel? Skrev for n in range (1,1000) för att jag trodde att det inte skulle gå annars. Men jag vill ha fram alla godtyckliga heltalsvärden. Funkar ändå inte.
Det fattas väl någon likhet i if-satsen? Just nu står det väl i princip "if UTTRYCK, skriv ut"? Vad ska uttrycket uppfylla? :)
Dessutom ska det finnas ett kolon i slutet på raden med 'if', och det fattas också en parentes, så det blir troligen syntaxfel.
Smutstvätt skrev:Det fattas väl någon likhet i if-satsen? Just nu står det väl i princip "if UTTRYCK, skriv ut"? Vad ska uttrycket uppfylla? :)
Jahaaaa! Men i så fall kanske det är dumt att använda en if-sats? Jag vill ju bara att ekvationen ska skriva ut alla heltal n som uppfyller villkoret. Men om jag tar bort "if" så blir det ändå fel? Läser inte programmering så detta är mer som en slags gissningslek vilket kanske inte är så bra...
Nejdå, en if-sats är bra, men du måste ha ett villkor att uppfylla. Är det exempelvis att bråket ska vara ett heltal?
Smutstvätt skrev:Nejdå, en if-sats är bra, men du måste ha ett villkor att uppfylla. Är det exempelvis att bråket ska vara ett heltal?
Ja! Hur skrivs det?
quote = BRÅKET
isinstance(quote, int)
borde fungera. :)
Smutstvätt skrev:quote = BRÅKET isinstance(quote, int)
borde fungera. :)
Tack för hjälpen!!
Varsågod! :)
Jag misstänker att kvoten alltid är ett flyttal, även om det matematiskt är ett heltal, t. ex. 3.14/1.57 = 2.0.
Laguna skrev:Jag misstänker att kvoten alltid är ett flyttal, även om det matematiskt är ett heltal, t. ex. 3.14/1.57 = 2.0.
Hej! Jag förstår inte riktigt vad du menar nu!
Det betyder att isinstance(quote, int) alltid är falskt. Men prova och se hur det går.
Laguna skrev:Det betyder att isinstance(quote, int) alltid är falskt. Men prova och se hur det går.
Jo du har nog rätt, alla tal mellan 1 till 1000 printades:
Men vad kan man skriva istället då?
Nu testar du inte att uttrycket är ett heltal. Lägg in isinstance-uttrycket i din if-sats, så att du testar utifrån det. Men Laguna kan ha rätt att det kan bli problem ändå. Prova! :)
Smutstvätt skrev:Nu testar du inte att uttrycket är ett heltal. Lägg in isinstance-uttrycket i din if-sats, så att du testar utifrån det. Men Laguna kan ha rätt att det kan bli problem ändå. Prova! :)
Ok, nu ser det ut så här:
Men jag trodde att isinstance-uttrycket skulle var svaret på if-satsen. Men vad ska man lägga in som svar där nu istället? För det här ovan printar ingenting.
Prova något i denna stilen.
import math
for n in range (1,1000):
if(((12-math.sqrt(n))/(4-math.sqrt(7))).is_integer()):
print(n)
Dracaena skrev:Prova något i denna stilen.
import math for n in range (1,1000): if(((12-math.sqrt(n))/(4-math.sqrt(7))).is_integer()): print(n)
Den lösningen verkar fungera i den här uppgiften, men man kan få problem i andra situationer med flyttal som borde vara heltal men bara nästan är det. T.ex. det här, som borde bli exakt 11: ((1+sqrt(5))/2)**4 + ((1-sqrt(5))/2)**4. Det blir 11.000000000000002 med motsvarande Python-uttryck, och därmed är is_integer falsk.
Ett alternativ för att bli av med problemet med flyttal är följande:
if (abs(variabel - round(variabel)) < LITET VÄRDE:
print(variabel)
Med valfri storlek på LITET VÄRDE, men något värde nära noll, typ 0,00001.
Detta gör att vi kringgår flyttalsfel, och slipper problemet som Laguna nämnde med int-typen. :)
Det borde gå att använda .ceil() eller .floor() också, men det är nog lättare att det blir knas.
Dracaena skrev:Prova något i denna stilen.
import math for n in range (1,1000): if(((12-math.sqrt(n))/(4-math.sqrt(7))).is_integer()): print(n)
Fick rätt när jag gjorde detta, stort tack för hjälpen alla!