Sida 1 av 1

Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 00:44
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

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 01:20
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

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 01:26
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

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 01:27
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?

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 01:38
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...

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 14:32
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?

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 15:08
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.. ;)).

SV: Python Hjälp (Nybörjare)

Postat: 04 mar 2007, 15:33
av kaapu
ahaaaa !!  :D

Där klargjorde du en hel del! Man tackar man tackar! ;D

SV: Python Hjälp (Nybörjare)

Postat: 05 mar 2007, 18:23
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...