Hjälp en pythonnybörjare

Avdelningen för programmering, nätverk samt alternativa OS.
Post Reply
User avatar
Bananamoon
Posts: 331
Joined: 2005-04-01 11:17:17
Contact:

Post by Bananamoon »

Tog mina första stapplande steg i programmeringens underbara värld igår!

Har gett mig på det här med while-satser. Ta en titt på följande kod: (jag vet, det är ett FANTASTISKT program ;))

Code: Select all

print "Welcome to the program that tells you if a number is bigger or smaller than 100."
print "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
print
yes = 1
answer = yes
while answer == yes:
	number = input("Enter the number you want to check: ")
	if number in range(0,10):
		print "\nThe number is much smaller than 100."
	elif number == 100:
		print "\nThe number is exactly 100."
	elif number in range(11,90):
		print "\nThe number is smaller than 100."
	elif number in range(91,99):
		print "\nThe number is just a little smaller than 100."
	elif number in range(101,500):
		print "\nThe number is bigger than 100."
	elif number > 500:
		print "\nThe number is much bigger than 100."
	print "\nCheck another number?"
	answer = input("1 to check another number, 2 to stop: ")
		
print "\nBye bye!"
Det jag funderar över är rad 5. Är det bra löst? Först hade jag i princip en dublett av hela koden i början av programmet utan while-satsen eftersom jag skrev en enklare variant utan den först. Men det kändes onekligen inte vettigt. Jag vill inte heller att användaren ska behöva mata in något där för att få programmet att rulla på (typ rad 21) eftersom det inte behövs.

Så hur gör jag? Finns det nåt proffsigare sätt än som jag gjort på rad 5?
Macolm: iMac 20" 2,4 Ghz - 4Gb RAM
Angus: Athlon64 3000+ s939@2,65Ghz - 1Gb - 8600GT - 250Gb - DVD-RW - 17" TFT - Vista
Darkstar: PII 400 Mhz - 384Mb - 6Gb+250Gb - nVidia 8 mb :) - SuSE 10.1
Bloggen
User avatar
Niklas Berggren
Hedersbit
Posts: 3524
Joined: 2002-03-08 17:53:04
Location: Göteborg (Skövde)
Contact:

Post by Niklas Berggren »

Delad från en gammal pythontråd.
"How about the government sticks to courts, police, defense and corruption and leave compassion to the people who have it?" - Penn Jillette.
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

Efter att ha funderat en stund kom jag fram till att det var ganska bra löst trots allt.
Visst, man kunde haft "while answer == 1.." men det blir ju trots allt lite läsbarare
att ha som du med yes = 1 innan.

Däremot vet jag inte om range(x..y) är smartast* använt, jag skulle nog ha gjort
i den här stilen:

if number < 10 ...
elif number < 90 ...
elfi number < 100 ...
eftersom man kan dra nytta av de tidigare gjorda testerna.

*) i det här programmet spelar det säkert ingen roll, men prova att köra pythonprogram
med range(1..100+ miljoner) så ser ni. ;)
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
User avatar
Bananamoon
Posts: 331
Joined: 2005-04-01 11:17:17
Contact:

Post by Bananamoon »

Code: Select all

print "Welcome to the program that tells you if a number is bigger or smaller than 100."
print "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
print
yes = 1
answer = yes
while answer == yes:
	number = input("Enter the number you want to check: ")
	if number < 10:
		print "\nThe number is much smaller than 100."
	elif number == 100:
		print "\nThe number is exactly 100."
	elif number < 90:
		print "\nThe number is smaller than 100."
	elif number < 100:
		print "\nThe number is just a little smaller than 100."
	elif number > 100:
		print "\nThe number is bigger than 100."
	elif number > 500:
		print "\nThe number is much bigger than 100."
	print "\nCheck another number?"
	answer = input("1 to check another number, 2 to stop: ")
		
print "\nBye bye!"
Hm, konstigt, när jag gör såhär istället funkar det inte med nummer över 500. Alltså det funkar men programmet ger samma meddelande som för meddelanden mellan 100 och 500. Dock funkar det som det ska åt andra hållet, neråt alltså med de små numren. Antar jag kan fixa det med range men jag är lite nyfiken på varför det blir som det blir.



En annan grej, hur gör jag om jag vill att användaren ska kunna mata in t.ex y eller n istället för 1 eller 2?
prova att köra pythonprogram
med range(1..100+ miljoner) så ser ni. Blinkning ;)
tror jag skippar det... ;)
Visst, man kunde haft "while answer == 1.." men det blir ju trots allt lite läsbarare
att ha som du med yes = 1 innan.
Okej...men jag hade väl fortfarande behövt en rad som "ger yes till while" så att säga? Hur kunde man gjort om man inte gjort som jag? (Eller kanske man inte skulle gjort på nåt annat sätt).
Macolm: iMac 20" 2,4 Ghz - 4Gb RAM
Angus: Athlon64 3000+ s939@2,65Ghz - 1Gb - 8600GT - 250Gb - DVD-RW - 17" TFT - Vista
Darkstar: PII 400 Mhz - 384Mb - 6Gb+250Gb - nVidia 8 mb :) - SuSE 10.1
Bloggen
User avatar
slaüman
Posts: 966
Joined: 2002-04-14 12:55:52
Location: Göteborg
Contact:

Post by slaüman »

sen matchar > 100, och testar då inte för 500 då den redan funnit ett sant kriterium.
Du måste limitera även åt andra hållet;
(Rent syntaxmässigt vet jag inte hur man gör detta i python)
number > 100 && number < 500

&& är då och (AND)

EDIT: Alternativt så byter du plats på 500 & 100, det är nog mer rätt svar efter att jag läste IcePic's inlägg... sry :)
User avatar
Bananamoon
Posts: 331
Joined: 2005-04-01 11:17:17
Contact:

Post by Bananamoon »

sen matchar > 100, och testar då inte för 500 då den redan funnit ett sant kriterium.
Just det, såklart. Byta plats funkar ju.

Men jag har fortfarande inte löst hur jag byter ut yes = 1 till typ yes = y...
Macolm: iMac 20" 2,4 Ghz - 4Gb RAM
Angus: Athlon64 3000+ s939@2,65Ghz - 1Gb - 8600GT - 250Gb - DVD-RW - 17" TFT - Vista
Darkstar: PII 400 Mhz - 384Mb - 6Gb+250Gb - nVidia 8 mb :) - SuSE 10.1
Bloggen
Zhaozhou
Posts: 150
Joined: 2005-06-25 14:32:20
Contact:

Post by Zhaozhou »

Code: Select all


alive = true;
while alive:
    x = raw_input("Enter some number, enter "stop" to quit");
    if x == "stop":
        alive = false;
    try:
        x= int(x);
    except ValueError:
        print "Please enter a number or the string "stop".

    if x < 100:
        print "jo, det är ett litet tal.";
    if something:
        print "anything";

nånting i den stilen du menar?[/quote]
"Only after disaster can we be resurrected"
- Must be a level 8 issue.
User avatar
Bananamoon
Posts: 331
Joined: 2005-04-01 11:17:17
Contact:

Post by Bananamoon »

japp, men det funkade å andra sidan att behålla hela den gamla koden och bara byta input till raw input istället.

En annan fråga, hur kan jag få ett program att "flasha" objekt från en lista i tur och ordning, jag vill alltså inte att listan ska printas i sin helhet utan först ska objekt 1 visas i, säg, 1 sek, sen ska det försvinna från skämren och objekt 2 dyka upp på samma sätt osv...
Macolm: iMac 20" 2,4 Ghz - 4Gb RAM
Angus: Athlon64 3000+ s939@2,65Ghz - 1Gb - 8600GT - 250Gb - DVD-RW - 17" TFT - Vista
Darkstar: PII 400 Mhz - 384Mb - 6Gb+250Gb - nVidia 8 mb :) - SuSE 10.1
Bloggen
User avatar
nem
Hedersbit
Posts: 4678
Joined: 2002-04-12 15:48:33
Location: Lund

Post by nem »

Bananamoon wrote:japp, men det funkade å andra sidan att behålla hela den gamla koden och bara byta input till raw input istället.

En annan fråga, hur kan jag få ett program att "flasha" objekt från en lista i tur och ordning, jag vill alltså inte att listan ska printas i sin helhet utan först ska objekt 1 visas i, säg, 1 sek, sen ska det försvinna från skämren och objekt 2 dyka upp på samma sätt osv...
En for-loop...

Det svåra där är att hitta bibliotek stödjer att man visar något, och sedan tar bort det efter en viss tid. Men jag skulle ha löst det på följande vis (pseudo-kod):

Visa element

for i=1, i < n;i++
delay
Ta bort element i-1
Visa element i
end
"Rightful liberty is unobstructed action according to our will within limits drawn around us by the equal rights of others."- Thomas Jefferson
User avatar
Peter Wall
Hedersbit
Posts: 7026
Joined: 2002-03-08 0:52:56
Location: Stockholm
Contact:

Post by Peter Wall »

Rensat.
Diplomerad webbutvecklare
Microsoft Certified Professional Windows 2003
Microsoft Certified Technology Specialist Windows Vista
"Did you know kidneys and applesauce are a delicacy in Sweden? I'm gonna get my applesauce back!"
Post Reply