Jump to content
Just nu i M3-nätverket

Humortråden


MahdiM
 Share

Recommended Posts

  • Replies 4k
  • Created
  • Last Reply

Top Posters In This Topic

  • Pocahontas

    331

  • Axelman

    540

  • Alix

    445

  • xeric

    627

Cx2LA4IUkAAdzDI.jpg

Hahaha! :hihihi:

Link to comment
Share on other sites

Det är en bugg, så nej... inget kul med buggar. Men vad den gör är lite kul. ^_^Javascript from hell.

 

Fattar nada.

Link to comment
Share on other sites

Skriptet räknar fel. :)

Skall man vara riktigt petnoga så att den räknar ö h t som är fel. :D "5" är en textsträng och 2 ett tal (integer). Så, sista exemplet blir (halv-)rätt. "5" + 2 är 52, precis som "Hej" + "Hej" är HejHej

Link to comment
Share on other sites

Skall man vara riktigt petnoga så att den räknar ö h t som är fel. :D "5" är en textsträng och 2 ett tal (integer). Så, sista exemplet blir (halv-)rätt. "5" + 2 är 52, precis som "Hej" + "Hej" är HejHej

 

Men första exemplet då? Är det en beräkning?

Link to comment
Share on other sites

Skriptet räknar fel. :)

 

Jag börjar förstå det. För mig är det siffror och tecken som betyder nada eller vad som helst.

Link to comment
Share on other sites

Men första exemplet då? Är det en beräkning?

Ja, den räknar ju “rätt” i 1'a där, men gör fel. Man kan inte blanda olika typer av värden. "5" är en sträng - så det kunde lika gärna stått "Fem". Det saknas kontroller s a s. För att bäst illustrera det (som saknas)... Om man kör samma i Python's konsol:

 

post-64246-0-60704900-1479904969_thumb.jpg

 

Link to comment
Share on other sites

Ja, den räknar ju “rätt” i 1'a där, men gör fel. Man kan inte blanda olika typer av värden. "5" är en sträng - så det kunde lika gärna stått "Fem". Det saknas kontroller s a s. För att bäst illustrera det (som saknas)... Om man kör samma i Python's konsol:

 

 

 

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

Link to comment
Share on other sites

Det är en bugg, så nej... inget kul med buggar. Men vad den gör är lite kul. ^_^Javascript from hell.

Det är ingen bugg, språket är tänkt att fungera så.

 

 

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

 

Javascript har ett väldigt svagt typsystem, vilket enkelt uttryckt innebär att ett värdes typ (heltal, text, sanningsvärde.....) anpassas efter omgivningen.

Den första raden innehåller textsträngen "5" och från den ska heltalet 2 subtraheras. Eftersom det är ganska lätt att ändra textsträngen "5" till heltalet 5 så betraktades den som ett heltal.

I den andra raden tolkas plustecknet som konkatenering och omvandlar heltalet 2 till textsträngen "2".

Undrar hur

 

5 + "2"

hade tolkats?

 

Som jämförelse kan nämnas Java, där man måste ange vilken typ ett värde har.

 

Ex:

int x = 2

String y = "5"

char z = '5'

 

I Java kontrolleras även koden innan programmet "tillverkas"; försöker du addera text med ett heltal så kommer typcheckaren undra vad fan du sysslar med.

 

https://sv.wikipedia.org/wiki/Konkatenering

Link to comment
Share on other sites

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

 

 

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

# Det är det som blirr “fel”. Den tar helt enkelt siffran och tolkar det som ett tal. Man får inte lura sig på "citattecknen", de syns inte när den läses sen (t ex kör i Terminal: echo "5"). Men även om resultatet av "5" visas som 5 så är det fortfarande en textsträng. Oavsett om det står "5" - 2 eller "Fem" - 2 så skall man inte kunna beräkna det. PHP gör liknande, och räknar t o m “rätt” på 2'a exemplet - även om man slår på “strict”. :rolleyes: Men där finns lite andra funktioner så man kan validera innan man kör det så den inte kör fel. Finns sökert liknande i JS.

 

 

# Man kan köra om strängen till en integer med int("5") - eftersom det är den siffra (5). Och det kan man med javascript med. Heter: parseInt(). Så konverterar man textsiffran till ett tal. Alla språk har lika/liknande funktioner.

Link to comment
Share on other sites

post-74999-0-40146200-1479910788_thumb.jpg

  • Upvote 2
Link to comment
Share on other sites

# Det är det som blirr “fel”. Den tar helt enkelt siffran och tolkar det som ett tal. Man får inte lura sig på "citattecknen", de syns inte när den läses sen (t ex kör i Terminal: echo "5"). Men även om resultatet av "5" visas som 5 så är det fortfarande en textsträng. Oavsett om det står "5" - 2 eller "Fem" - 2 så skall man inte kunna beräkna det. PHP gör liknande, och räknar t o m “rätt” på 2'a exemplet - även om man slår på “strict”. :rolleyes: Men där finns lite andra funktioner så man kan validera innan man kör det så den inte kör fel. Finns sökert liknande i JS.

 

 

# Man kan köra om strängen till en integer med int("5") - eftersom det är den siffra (5). Och det kan man med javascript med. Heter: parseInt(). Så konverterar man textsiffran till ett tal. Alla språk har lika/liknande funktioner.

 

Okej, den hämtar alltså de siffror som finns i texten och gör tal av dem. Så om man skriver:

int("fem")

händer inget (eller blir det error?

 

På samma sätt blir:

int("potatis")

ingenting heller?

 

Men om man skriver:

int("p0tat15")

så blir det 015?

Link to comment
Share on other sites

Javascript har ett väldigt svagt typsystem, vilket enkelt uttryckt innebär att ett värdes typ (heltal, text, sanningsvärde.....) anpassas efter omgivningen.

Den första raden innehåller textsträngen "5" och från den ska heltalet 2 subtraheras. Eftersom det är ganska lätt att ändra textsträngen "5" till heltalet 5 så betraktades den som ett heltal.

I den andra raden tolkas plustecknet som konkatenering och omvandlar heltalet 2 till textsträngen "2".

 

 

Men förhållandet mellan textsträng och heltal är ju 1:1 i båda fallen, men med olika resultat. Är det plustecknet och minustecknet som avgör?

Link to comment
Share on other sites

Okej, den hämtar alltså de siffror som finns i texten och gör tal av dem. Så om man skriver:

int("fem")
händer inget (eller blir det error?

 

På samma sätt blir:

int("potatis")
ingenting heller?

 

Men om man skriver:

int("p0tat15")
så blir det 015?

 

Nej, den blir också fel. Men med en sånt text kan man ju alltid filtrera ut siffrorna med ngn form av regex - om man nu vill åt dem. Men alla 3 blir bara fel. Rena tal, eller tal med decimaler går att göra om från str till int (el float).

 

Rensade ur lite meddelanden, med felen finns med:

>>> int("Fem")
ValueError: invalid literal for int() with base 10: 'Fem'

>>> int("5")
5

>>> int("potatis")
ValueError: invalid literal for int() with base 10: 'potatis'

>>> int("p0tat15")
ValueError: invalid literal for int() with base 10: 'p0tat15'

 

Ett tal kan man ju alltid (omvänt) göra till en sträng med, antingen bara att sätta "" runt eller med str()

>>> "potat" + 15
TypeError: Can't convert 'int' object to str implicitly

>>> "potat" + str(15)
'potat15'

 

Inte så bra exempel eftersom man skriver 15 för hand. Men om man t ex får ett värde från nåt annat ställe i t ex ett skript/program, så kanske det ser ut så här:

VAR = "foobar_" + str(nr)

print(VAR)       # foobar_123
Link to comment
Share on other sites

  • Axelman changed the title to Humortråden

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share




×
×
  • Create New...