Vinnaren i pepparkakshustävlingen!
2010-02-01, 21:22
  #1
Medlem
MrsYellows avatar
Är helt nybörjare vad gäller all programmering och borde nu smeta ihop en kod som räknar ränta på satsat kapital.

Om man satsar under 5000 betalar banken en årlig ränta på 0,5%
Om man satsar mellan 5000 0ch 10000 betalar banken en årlig ränta på 1%
Och om man satsar mer än 10000 betalar banken en årlig ränta på 1,5%
Man får låsa pengarna på banken högst ett år

Har börjat lite på koden men kommer ingen vart
Kod:
summa raw_input("Hur mycket pengar kommer du att satsa?")
if 
summa <= 0:
    print 
"error"
tid raw_input("For hur lange?"

Varför säger inte programmet error när man trycker in ett negativt tal för summa?
Citera
2010-02-01, 21:29
  #2
Medlem
Logisks avatar
Citat:
Ursprungligen postat av MrsYellow
Är helt nybörjare vad gäller all programmering och borde nu smeta ihop en kod som räknar ränta på satsat kapital.

Om man satsar under 5000 betalar banken en årlig ränta på 0,5%
Om man satsar mellan 5000 0ch 10000 betalar banken en årlig ränta på 1%
Och om man satsar mer än 10000 betalar banken en årlig ränta på 1,5%
Man får låsa pengarna på banken högst ett år

Har börjat lite på koden men kommer ingen vart
Kod:
summa raw_input("Hur mycket pengar kommer du att satsa?")
if 
summa <= 0:
    print 
"error"
tid raw_input("For hur lange?"

Varför säger inte programmet error när man trycker in ett negativt tal för summa?

Är ingen höjdare på Python, men jag tror att det är för att raw_input inte är av formen int.

Kod:
summa = int(raw_input("Hur mycket pengar kommer du att satsa?"))
Citera
2010-02-01, 21:32
  #3
Medlem
SSHs avatar
raw_input returnerar en sträng, inte ett heltal. Du kan parsa ett heltal från en sträng genom att skicka med den till funktionen int. Tänk på att om strängen inte är ett heltal så kommer ett ValueError att kastas, så se antingen till att fånga exceptionet eller kontrollera att strängen är ett heltal innan du skickar med den till int. Exempel där exceptionet fångas.

Kod:
try:
    
summa int(raw_input("Hur mycket pengar kommer du att satsa?"))
    if 
summa <= 0:
        print 
"error"
    
tid int(raw_input("For hur lange?"))  
except ValueError:
    print 
"Inget heltal" 
Citera
2010-02-01, 22:32
  #4
Medlem
MrsYellows avatar
Citat:
Ursprungligen postat av Logisk
Är ingen höjdare på Python, men jag tror att det är för att raw_input inte är av formen int.

Kod:
summa = int(raw_input("Hur mycket pengar kommer du att satsa?"))

Tack detta hjälpte mig verkligen


Citat:
Ursprungligen postat av SSH
raw_input returnerar en sträng, inte ett heltal. Du kan parsa ett heltal från en sträng genom att skicka med den till funktionen int. Tänk på att om strängen inte är ett heltal så kommer ett ValueError att kastas, så se antingen till att fånga exceptionet eller kontrollera att strängen är ett heltal innan du skickar med den till int. Exempel där exceptionet fångas.
Kod:
try:
    summa = int(raw_input("Hur mycket pengar kommer du att satsa?"))
    if summa <= 0:
        print "error"
    tid = int(raw_input("For hur lange?"))  
except ValueError:
    print "Inget heltal"

Detta förstod jag inte men märkte att nog att det blev problem om man tryckte in ett decimaltal. Hur skall jag åtgärda detta? Mitt program ser nu ut såhär
Kod:
summa = int(raw_input("Hur mycket pengar kommer du att satsa?"))
aika = int(raw_input("For hur lange?"))
if summa <=0 or aika <=0 or aika >=366:
    print "error!"
else:
    tal = aika/365.
    if summa > 5000 or summa <=1000:
        print "Rantan ar", summa*tal*0.01, "euroa"
    else:
        if summa > 10000:
            print "Rantan ar", summa*tal*0.015, "euroa"
        if summa <= 5000:
            print "rantan ar", summa*tal*0.005, "euroa"
Citera
2010-02-01, 22:57
  #5
Medlem
SSHs avatar
Citat:
Ursprungligen postat av MrsYellow
Tack detta hjälpte mig verkligen




Detta förstod jag inte men märkte att nog att det blev problem om man tryckte in ett decimaltal. Hur skall jag åtgärda detta? Mitt program ser nu ut såhär
Kod:
summa = int(raw_input("Hur mycket pengar kommer du att satsa?"))
aika = int(raw_input("For hur lange?"))
if summa <=0 or aika <=0 or aika >=366:
    print "error!"
else:
    tal = aika/365.
    if summa > 5000 or summa <=1000:
        print "Rantan ar", summa*tal*0.01, "euroa"
    else:
        if summa > 10000:
            print "Rantan ar", summa*tal*0.015, "euroa"
        if summa <= 5000:
            print "rantan ar", summa*tal*0.005, "euroa"

För decimaltal får du använda float istället för int. float kan liksom int kasta ett ValueError om den givna strängen inte kan parsas. Du bör läsa på om hur Python hanterar fel:
http://docs.python.org/tutorial/errors.html#exceptions
Citera
2010-02-01, 23:23
  #6
Medlem
MrsYellows avatar
Citat:
Ursprungligen postat av SSH
För decimaltal får du använda float istället för int. float kan liksom int kasta ett ValueError om den givna strängen inte kan parsas. Du bör läsa på om hur Python hanterar fel:
http://docs.python.org/tutorial/errors.html#exceptions

Det löste problemet, du är en sann hjälte SSH
Citera
2010-02-02, 10:29
  #7
Medlem
MrsYellows avatar
Nytt problem

Försöker fixxa en övertids löneräknare men jag får inte tiden att stämma. Vad är det för fel på min kod?
Citera
2010-02-02, 15:43
  #8
Medlem
SSHs avatar
Citat:
Ursprungligen postat av MrsYellow
Nytt problem

Försöker fixxa en övertids löneräknare men jag får inte tiden att stämma. Vad är det för fel på min kod?

Det första värdet på over läggs till två gånger till din summa, först innan while-loopen och sedan då första varvet av loopen körs. Sätt summa till 0 innan loopen för att undvika detta.
Citera
2010-02-02, 18:36
  #9
Medlem
Angående din första fråga så gjorde ni svaret lite väl invecklat.

använd input istället för raw_input helt enkelt
Citera
2010-02-02, 19:44
  #10
Medlem
SSHs avatar
Citat:
Ursprungligen postat av Jonate
Angående din första fråga så gjorde ni svaret lite väl invecklat.

använd input istället för raw_input helt enkelt

input(str) är samma sak som eval(raw_input(str)), det tillåter alltså en användare att utvärdera ett godtyckligt uttryck. Ett exempel på en sträng som användaren kan mata in är __import__('os').remove('fil'), vilket tillåter användaren att ta bort filer som processen har skrivrättigheter till. Användandet av eval försvårar även felhanteringen, många typer av Exceptions kan kastas beroende på vad för sorts uttryck som matas in. Med int eller float tillsammans med raw_input kan bara ValueError kastas.

I Python 3 kommer input-funktionen att tas bort och raw_input kommer döpas om till input.
Citera
2010-02-03, 09:57
  #11
Medlem
MrsYellows avatar
Citat:
Ursprungligen postat av SSH
Det första värdet på over läggs till två gånger till din summa, först innan while-loopen och sedan då första varvet av loopen körs. Sätt summa till 0 innan loopen för att undvika detta.

Tack, det löste problemet
Citera
2010-03-03, 13:52
  #12
Medlem
MrsYellows avatar
När man har en lista med siffror, typ
Kod:
siffror = {0: 3,1: 3.5,2: 3.2,3: 2.9,4: 3}

Jag vill ha ett medeltal av dessa. Hur skall jag göra för att få summan av talen?
Nämnarn får man väl med len(siffror)

Har prövat med
Kod:
bla = len(luvut)
summa = 0
for test in siffror:
    summa = summa + siffror[test]
medeltal = summa/bla

Men summa stämmer inte.. När man trycker in siffrorna på kalkylatorn blir summan 15,7 och enligt python blire 15,6
__________________
Senast redigerad av MrsYellow 2010-03-03 kl. 14:05.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback