Forum: forts. pythonproblem

Forum huvudsida -> Programmering -> forts. pythonproblem

Sidor: 1

Till botten

lalindb 23:34 - 17:e April 2007 | Post #1
Medlem
Inlägg: 6


Skicka PM
Jag kom just på att jag kan skriva tex 2007-03-17: istället för 17 mars:.
Detta gör att jag får en sorterad lista om jag använder mig av sort().
Men nu vill jag ta tex den första nyckeln och dess tillhörande value och få det som något slags default värde eller aktuell sida i stil med:

Aktuell sida: 2007-05-03 : ...ka på semester...

1) Lägga till sida
2) Ta bort en sida
3) Sök sida
4) Visa alla sidor
5) Bläddra framåt
6) Avsluta och spara

Väljer jag sedan 5) ska aktuell sida bli tex:

Aktuell sida: 2007-05-04: Ankommer till resorten kl.10.00

1) Lägga till sida
2) Ta bort en sida
3) Sök sida
4) Visa alla sidor
5) Bläddra framåt
6) Avsluta och spara

Här kommer koden...

//Lars

#inläsning av anteckningar
filename = "filfax.txt"

def readFilofax(filofax):
import os
if os.path.exists(filename):
store = open(filename,'r')
for line in store:
name = line.rstrip()
entry = store.next().rstrip()
filofax[name] = entry
store.close()

#spara filofaxanteckningarna
def saveFilofax(filofax):
store = open(filename, 'w')
for name,entry in filofax.items():
store.write(name + '\n')
store.write(entry + '\n')
store.close()

#välja alternativ
def getChoice(menu):
print menu
choice = int( raw_input("Välj alternativ(1-6): ") )
return choice

#sätta in en ny sida
def addTodo(filofax):
name = raw_input("Ange datum och månad: ")
entry = raw_input("Skriv minnesanteckning: ")
filofax[name] = entry

#ta bort en sida
def removeTodo(filofax):
name = raw_input("Ange datum och månad: ")
del(filofax[name])

#sök anteckning en viss dag
def findTodo(filofax):
name = raw_input("Ange datum och månad: ")
if name in filofax:
print name, filofax[name]
else: print "Tyvärr, angivet datum saknas: ", name

#visa alla anteckningar
def show_all_Todo(filofax):
for name,entry in filofax.items():
print name +":",entry
#store = open(filename,'r')
#for line in store:
#print line

#bläddra framåt
def step_fwd_Todo(filofax):
L1=filofax.keys()
L1.sort()
print "the keys are:"
print L1, "\n"
print "Aktuell dag: ", L1[1], ": ", filofax[L1[1]]


def main():
theMenu = '''
1) Lägga till sida
2) Ta bort en sida
3) Sök sida
4) Visa alla sidor
5) Bläddra framåt
6) Avsluta och spara
'''
theFilofax = {}
readFilofax(theFilofax)
choice = getChoice(theMenu)
while choice != 6:
if choice == 1:
addTodo(theFilofax)
elif choice == 2:
removeTodo(theFilofax)
elif choice == 3:
findTodo(theFilofax)
elif choice == 4:
show_all_Todo(theFilofax)
elif choice == 5:
step_fwd_Todo(theFilofax)
else: print "Invalid choice, try again"
choice = getChoice(theMenu)
saveFilofax(theFilofax)

#if statement är sant om programmet körs direkt och falskt om filen är importerad som en modul.
if __name__ == "__main__":
main()


Senast redigerad 11:34 - 18:e April 2007


Independence 23:41 - 17:e April 2007 | Post #2
Administratör
Inlägg: 1800


Skicka PM
Hm, finns det verkligen en sort() till dictionarys? Kanske är nytt i 2.5 iofs.

Angående själva problemet kan du ju helt enkelt spara värdet av nyckeln i en variabel som heter typ current eller något?

-------------------------

Vi är riddarna som säger fiskbulle!



Senast redigerad 23:41 - 17:e April 2007


sdac 23:43 - 17:e April 2007 | Post #3
Medlem
Inlägg: 235


Skicka PM
Ett tips: Skapa inte en ny tråd endast för att fortsätta på en tidigare tråd. Skriv istället ett nytt inlägg i den förra eller använd ändra-funktionen.

Ett till tips: Visa källkod direkt i forumet och peka ut vart problemet ligger, tror ingen är villig att spendera massa tid på att utbyta emailadresser och sitta och vänta på mail endast för att kunna hjälpa en främmande person.

Tyvärr kodar jag inte python och kan inte hjälpa dig, men jag vet att många andra här håller på en hel del med python, så jag är ganska säker på att du enkelt kan få hjälp om du följer mina tips ovan.

Lycka till.




ozamosi 14:18 - 18:e April 2007 | Post #4
Administratör
Inlägg: 1129


Skicka PM
Fler tips:
  • Lägg koden i source-taggar så den går att läsa
  • Lägg till en ny post så att folk ser att du gjort något - ingen läser om en tråd de redan läst, bara för att leta efter redigeringar.


-------------------------
Ljusblå



Independence 16:32 - 18:e April 2007 | Post #5
Administratör
Inlägg: 1800


Skicka PM
Vad är problemet nu förresten? Gick det inte att spara nyckeln i en variablel, och sedan använda det för att ta fram det värdet man är på för tillfället?

-------------------------

Vi är riddarna som säger fiskbulle!





lalindb 02:42 - 19:e April 2007 | Post #6
Medlem
Inlägg: 6


Skicka PM
    Citat av ozamosi:
Fler tips:
  • Lägg koden i source-taggar så den går att läsa
  • Lägg till en ny post så att folk ser att du gjort något - ingen läser om en tråd de redan läst, bara för att leta efter redigeringar.


Tack för feedback! Jag har massor att lära, det är uppenbart. Ha tålamod!
Jag vet inte hur jag lägger till en..."ny post". Eller är det precis vad jag gjort nu när jag svarat på ditt meddelande? Jag har mest hittat länkar som citera och PM alt. skapa ny tråd...




Independence 02:46 - 19:e April 2007 | Post #7
Administratör
Inlägg: 1800


Skicka PM
    Citat av lalindb:
    ...

Tack för feedback! Jag har massor att lära, det är uppenbart. Ha tålamod!
Jag vet inte hur jag lägger till en..."ny post". Eller är det precis vad jag gjort nu när jag svarat på ditt meddelande? Jag har mest hittat länkar som citera och PM alt. skapa ny tråd...


Längst ner på sidan finns det ett fält (snabbsvar) för att svara på inlägg. Annars funkar ju citat-saken bra också, eller länkan till svara-sidan.

-------------------------

Vi är riddarna som säger fiskbulle!





lalindb 03:00 - 19:e April 2007 | Post #8
Medlem
Inlägg: 6


Skicka PM
Härligt! Då var jag inte helt fel ute den här gången...Smiley

Har du något konkret tips på hur jag ska skriva rent praktiskt för att få till det enligt dina tankegångar?






lalindb 19:28 - 19:e April 2007 | Post #9
Medlem
Inlägg: 6


Skicka PM
    Citat av ozamosi:
Fler tips:
  • Lägg koden i source-taggar så den går att läsa
  • Lägg till en ny post så att folk ser att du gjort något - ingen läser om en tråd de redan läst, bara för att leta efter redigeringar.


Här kommer ett försök med taggar, ser inga färger i det här läget men det kanske ändrar sig när jag postar svaret!?
Jädrans vad tjatig jag börjar känna mig nu kring det här jädrans problemet jag har.

Alltså hur ska jag skriva rent praktiskt vad gäller en ny variabel i vilken tex första nyckeln ur den sorterade listan skall läggas och sedan skrivas ut så fort man startar programmet. Om jag sedan väljer alternativ 5) i menyn så ska jag kunna stega framåt till nästa nyckel i listan och printa ut denna som aktuell sida i min filofax.
Sedan måste jag få till en funktion för att kunna bläddra bakåt också på samma sätt.

//Lars

  1.  
  2. #inläsning av anteckningar
  3.  
  4. filename = "filfax.txt"
  5. def readFilofax(filofax):
  6. import os
  7. if os.path.exists(filename):
  8. store = open(filename,'r')
  9. for line in store:
  10. name = line.rstrip()
  11. entry = store.next().rstrip()
  12. filofax[name] = entry
  13. store.close()
  14.  
  15. #spara filofaxanteckningarna
  16.  
  17. def saveFilofax(filofax):
  18. store = open(filename, 'w')
  19. for name,entry in filofax.items():
  20. store.write(name + 'n')
  21. store.write(entry + 'n')
  22. store.close()
  23.  
  24. #välja alternativ
  25.  
  26. def getChoice(menu):
  27. print menu
  28. choice = int( raw_input("Välj alternativ(1-6): ") )
  29. return choice
  30.  
  31. #sätta in en ny sida
  32.  
  33. def addTodo(filofax):
  34. name = raw_input("Ange datum och månad: ")
  35. entry = raw_input("Skriv minnesanteckning: ")
  36. filofax[name] = entry
  37.  
  38. #ta bort en sida
  39.  
  40. def removeTodo(filofax):
  41. name = raw_input("Ange datum och månad: ")
  42. del(filofax[name])
  43.  
  44. #sök anteckning en viss dag
  45.  
  46. def findTodo(filofax):
  47. name = raw_input("Ange datum och månad: ")
  48. if name in filofax:
  49. print name, filofax[name]
  50. else: print "Tyvärr, angivet datum saknas: ", name
  51.  
  52. #visa alla anteckningar
  53.  
  54. def show_all_Todo(filofax):
  55. for name,entry in filofax.items():
  56. print name +":",entry
  57. #store = open(filename,'r')
  58. #for line in store:
  59. #print line
  60.  
  61. #bläddra framåt
  62.  
  63. def step_fwd_Todo(filofax):
  64. L1=filofax.keys()
  65. L1.sort()
  66. print "the keys are:"
  67. print L1, "n"
  68. print "Aktuell dag: ", L1[1], ": ", filofax[L1[1]]
  69.  
  70.  
  71. def main():
  72. theMenu = '''
  73. 1) Lägga till sida
  74. 2) Ta bort en sida
  75. 3) Sök sida
  76. 4) Visa alla sidor
  77. 5) Bläddra framåt
  78. 6) Avsluta och spara
  79. '''
  80. theFilofax = {}
  81. readFilofax(theFilofax)
  82. choice = getChoice(theMenu)
  83. while choice != 6:
  84. if choice == 1:
  85. addTodo(theFilofax)
  86. elif choice == 2:
  87. removeTodo(theFilofax)
  88. elif choice == 3:
  89. findTodo(theFilofax)
  90. elif choice == 4:
  91. show_all_Todo(theFilofax)
  92. elif choice == 5:
  93. step_fwd_Todo(theFilofax)
  94. else: print "Invalid choice, try again"
  95. choice = getChoice(theMenu)
  96. saveFilofax(theFilofax)
  97.  
  98. #if statement är sant om programmet körs direkt och
  99. #falskt om filen är importerad som en modul.
  100.  
  101. if __name__ == "__main__":
  102. main()
  103.  



Senast redigerad 19:33 - 19:e April 2007


ozamosi 20:14 - 19:e April 2007 | Post #10
Administratör
Inlägg: 1129


Skicka PM
Det saknas fortfarande mellanslagSmiley

Anyway... Jag skulle nästan föreslå att du slutar använda en dictionary, eftersom den saknar uppfattning om framåt och bakåt. Dessutom skulle det väl inte vara orimligt att tro att man kan vilja ha två todo-poster på samma dag? Skulle du försöka med det nu borde den andra posten skriva över den första.

Skulle du använda en lista innehållande andra listor, vilket du ju omvandlar din dictionary till de flesta gångerna du använder datan, skulle du till exempel kunna skicka med ett index till listan mellan de flesta funktionerna (eller göra indexet till en global variabel) som är ett heltal - den posten som för tillfället är aktiv har alltså på den positionen i listan. Dock får man då inte glömma bort att ändra på indexet när man lägger till todo-poster till exempel.

Eftersom du omvandlar dictionaryn till en lista vid användning går det att ha ett index utan att göra sig av med dictionaryn om man vill, men det låter läskigt - till exempel då man lägger till nya poster blir det komplicerat att hålla koll på sitt index.

Min inre lisphacker skriker åt mig att länkade listor skulle vara användbara här, men eftersom det enda som skrämmer mig mer än lispkod är min inre lisphacker vågar jag inte lista ut hur det skulle göras snyggt.

-------------------------
Ljusblå



Sidor: 1

Forum huvudsida -> Programmering -> forts. pythonproblem
Atom feed

Du får inte posta i den här tråden | Till toppen