Python Hjälp (Nybörjare)

Här diskuteras programmering och utveckling
kaapu
Inlägg: 96
Blev medlem: 29 okt 2006, 20:10

Python Hjälp (Nybörjare)

Inlägg av kaapu »

Börjat leka lite med python idag. Men nu har jag stött på ett problem som jag inte kunnat lösa på egen hand :

Kod: Markera allt

tal = raw_input("Hur monga tal vill du att datorn ska rakna upp?")

i = 0

while i < tal:
    
    i = i + 1
    print i
    
Varför fortsätter den lägga till nya tal hela tiden, borde väl ta stopp på det antalet tal man skrivit in?

Tacksam för hjälp!  :D
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Python Hjälp (Nybörjare)

Inlägg av Okänd »

tal är en sträng och i är ett heltal (integer)

Kod: Markera allt

tal = raw_input("Hur monga tal vill du att datorn ska rakna upp?")

i = 0

while i < int(tal):
    
    i = i + 1
    print i

borde funka bättre
Senast redigerad av 1 gasol, redigerad totalt 4 gånger.
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Python Hjälp (Nybörjare)

Inlägg av Okänd »

och här kommer en mycket bättre lösning:

Kod: Markera allt


tal = raw_input("Hur monga tal vill du att datorn ska rakna upp? ")


while 1:
   try:
      limit = int(tal)
      break;
   except:
      tal = raw_input("Hur monga tal vill du att datorn ska rakna upp? ")

i = 0

while (i < limit) :
    i = i + 1
    print i


Eftersom den första koden kommer att kracha då användaren matar in en sträng som inte är en siffra
kaapu
Inlägg: 96
Blev medlem: 29 okt 2006, 20:10

SV: Python Hjälp (Nybörjare)

Inlägg av kaapu »

ah man tackar !  :D

Så genom att sätta in int(tal) så berättar du för datorn att "tal" är en siffra?
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Python Hjälp (Nybörjare)

Inlägg av Okänd »

nästan, du säger till att i den strängen tal så finns det ett heltal. Kanske låter som samma sak som du sa, men när du lär dig mer om programmering så kommer du att förstå skillanden

En sträng representation av talet 543210 är  '5' '4' '3' '2' '1' '0' alltså en 5 en 4 en 3 en 2 en 1 och en 0 tecken.
sammanlagt 6 tecken och 6 bytes.

En heltals representation av talet är  binärt 10000100100111101010  1 32bitars heltal i 4 bytes.

Det är därför det blir fel när du matar in text i strängen och försöker konvertera den till ett tal, datorn vet inte vad den ska göra, det är därför man har en try sats som säger 'försök' göra det här, men om något går fel så hoppa till except: och kör det i så fall...
kaapu
Inlägg: 96
Blev medlem: 29 okt 2006, 20:10

SV: Python Hjälp (Nybörjare)

Inlägg av kaapu »

hm... Var i koden står det att när man skriver in bokstäver så kommer frågan upp igen?

Har det något med break att göra?  Vad är break egentligen?
Användarvisningsbild
DeepThought
Inlägg: 2769
Blev medlem: 19 dec 2006, 11:07
OS: Arch Linux
Ort: Göteborg

SV: Python Hjälp (Nybörjare)

Inlägg av DeepThought »

while-satsen betyder att allt som kommer efter (som är indenterat, python-style ;)) görs sålänge villkoret är uppfyllt (d.v.s. sålänge villkoret är sant - när det är true, eller i pythons fall när det är 1). I det här fallet är villkoret 1 - alltid - så den kommer att fortsätta tills while-satsen avbryts (ex. med ett break).

I while-blocket kommer först ett try-block, i vilket du kan göra saker (som att konvertera strängar till heltal) för att sedan kolla om det du försöker göra är tillåtet. Ex: får du lov att konvertera strängen "kalle" till ett heltal? Nej, då går vi in i except-blocket. Får vi lov att konvertera strängen "100" till ett heltal? Ja, då går vi vidare och hoppar över except-blocket.

Är det du försöker göra inte tillåtet går alltså programmet in i except-blocket och kör den kod som står där, för att sedan fortsätta while-loopen (som ju alltid är true eller 1). Om det då dyker upp ett break så kommer while-satsen att avbrytas, och i det här fallet kommer break om man skriver in en sträng som kan konverteras till ett heltal.

Hoppas detta hjälpte lite iallafall, och inte bara förvirrade dig mer. (Jag kanske borde nämna att jag inte alls programmerar Python, utan enbart har begränsade kunskaper i Java, så allt jag säger kanske inte är 100% överensstämmande med Python, även om jag tycker att det borde vara det.. ;)).
WE WILL ALWAYS BE SO MUCH MORE HUMAN THAN WE WISH TO BE...
kaapu
Inlägg: 96
Blev medlem: 29 okt 2006, 20:10

SV: Python Hjälp (Nybörjare)

Inlägg av kaapu »

ahaaaa !!  :D

Där klargjorde du en hel del! Man tackar man tackar! ;D
Användarvisningsbild
Urban Anjar
Inlägg: 7306
Blev medlem: 05 nov 2006, 22:59
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Vickleby
Kontakt:

SV: Python Hjälp (Nybörjare)

Inlägg av Urban Anjar »

raw_input() läser in en sträng, alltså en räcka tecken, och även om det är en räcka siffror fattar inte python att '10' är talet 10.

Kod: Markera allt

tal=int(tal)
är ett sätt att ta hand om det problemet, det vill säga att omvandla strängen till heltal.


Python kan visserligen "räkna" med strängar också men inte som man kanske förväntar sig som nybörjare:

Kod: Markera allt

>>> tal = 'tio'
>>> print 3*tal
tiotiotio
>>> 

Oj, missade att några hade svarat redan...
Senast redigerad av 1 Urban Anjar, redigerad totalt 5 gånger.
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
Skriv svar

Återgå till "Programmering och webbdesign"