Gå til innhold

Forslag til oppgåver til nybyrjar.


Anbefalte innlegg

Videoannonse
Annonse

Etter aa ha provd litt ser jeg at ifsetningene naar du skal hente inn informasjon for aa skrive databasen ikke funker. Dersom du setter inn "print 'ok'" inne i hver ifsetning ser du at ingen av dem trigger.

 

Dersom jeg lurer paa om noe funker saa pleier jeg aa skrive ut verdier og ting som "ok" inne i ifsetninger osv for aa se hvor feilen kan ligge. :)

 

Men jeg ser dessverre ikke hvorfor det ikke funker hos deg...

Lenke til kommentar

Hmm

buffer = open('buffer.txt')
for line in buffer.readline():
print line

Gir meg berre

Klikk for å se/fjerne innholdet nedenfor
<

?

x

m

l

 

v

e

r

s

i

o

n

=

'

1

.

0

'

 

e

n

c

o

d

i

n

g

=

'

U

T

F

-

8

'

?

>

Med andre ord vert det kun iterert (sikkert feilskrive) over den fyrste linja i tekstfila.

Endret av Arne
Lenke til kommentar
Hmm

buffer = open('buffer.txt')
for line in buffer.readline():
print line

Med andre ord vert det kun iterert (sikkert feilskrive) over den fyrste linja i tekstfila.

 

Kanskje ikke så rart hvis du leser koden. Du kaller buffer.readline() -- du mener nok buffer.readlines(). Merk 's' på slutten :)

Lenke til kommentar

Eg har funne ut at denne lesaren kanskje ikkje er så nyttig likevel, sidan det er så mange ting som kan gå gale.

 

Tenk om ein tag går over fleire linjer? Eg bør nok kanskje bruke noko som allereie er laga! Har høyrt at xml.minidom skal vere ok å bruke.

 

Innvendingar?

Lenke til kommentar
Eg har funne ut at denne lesaren kanskje ikkje er så nyttig likevel, sidan det er så mange ting som kan gå gale.

 

Tenk om ein tag går over fleire linjer?

 

Heh, jeg så ikke på koden din tidligere, men det er en del XML den ikke takler ja :)

 

Eg bør nok kanskje bruke noko som allereie er laga! Har høyrt at xml.minidom skal vere ok å bruke.

 

minidom er finfin den. En gyllen anledning til å lære seg hva DOMen er.

 

En annen ting du kan gjøre er jo å lage din egen XML-parser. Et hint er at du må bruke en stack for å få det til skikklig.

 

Lykke til :)

Lenke til kommentar
Å lage min eigen? Korleis meiner du med eigen?

Å lage din egen xml-parser, det finnes jo mange måter å gjøre det på og det kan være gøy. Men hvis du heller vil fort i gang med RSS-lesing kan du bruke feks minidom eller en annen xml-modul for python.

 

Uansett; det er morsommere å programmere enn å stille spørsmål her, er det ikke? ;)

Lenke til kommentar

Hei hå!

 

Tenkte jeg skulle prøve meg på rss-oppgaven en gang til. Ble litt bedre resultat nå. Sånn rent praktisk så er det vel bare øæå som ikke funker. Vet ikke helt hvorfor. Bruker wget i stedefor urllib2 siden urllib2 ikke søtter unicode etter hva jeg fant ut. (Ikke det at det hjalp så mye...)

 

Uansett, her er resultatet. :p

 

Klikk for å se/fjerne innholdet nedenfor

   #!/usr/bin/env python

  import sys
  import modPxml

  class client:
   def start(self):
	   try:
		   self.rss = modPxml.pxml()
	   except:
		   print "ER: Could not connect to modPxml."
		   print "Bye, bye. *EXIT*"
		   quit()
	   try:
		   self.showing_x_lines = ""
		   self.config = open('.rcpxml')
		   while True:
			   self.line = self.config.readline()
			   if len(self.line) == 0:
				   break
			   if self.line.startswith("showing_x_lines"):
				   self.showing_x_lines = self.line
				   self.showing_x_lines = \
				   int(self.showing_x_lines.replace\
				   ("showing_x_lines ", ''))
		   self.config.close()
		   if self.showing_x_lines == "":
			   self.showing_x_lines = 10
	   except:
		   print "Could not load config-file, loading default."
		   self.showing_x_lines = 10

   def showFeed(self, cmd):
	   try:
		   if cmd == False:
			   self.listOfTableNames = self.rss.namesOfTables()
		   try:
			   if cmd == False:
				   print "Enter number of the feed you want to see."
				   for i in range(0, len(self.listOfTableNames)):
					   print "#%s - %s" % (str(i+1), self.listOfTableNames[i])
				   self.choice = raw_input(">>> ")
				   self.wantedTableName = self.listOfTableNames[int(self.choice)-1]
			   self.listFromReturn = self.rss.getInfo(self.wantedTableName, [0,1,1,1,0,1,0,0,0])
			   self.listTitle = self.listFromReturn[0]
			   self.listLink = self.listFromReturn[1]
			   self.listDescription = self.listFromReturn[2]
			   self.listDate = self.listFromReturn[3]
		   except:
			   print "ER: Error fetching from database."
		   try:
			   if self.showing_x_lines >= len(self.listTitle):
				   self.showing_x_lines = len(self.listTitle)
			   for i in range(0, self.showing_x_lines):
				   print "=============================="
				   print "=>>", self.listTitle[i]
				   print ("(" + self.listLink[i] + ")")
				   print "=>>", self.listDate[i]
				   print self.listDescription[i]
		   except:
			   print "ER: Error printing list."
	   except:
		   print "EE: Could not retrive feed-names from database."
		   raw_input("EE: Try to add a feed or update feeds.")
   def addItem(self, cmd):
	   if cmd != True:
		   try:
			   self.name = raw_input("Enter a name. The name will distinct diffrent\\nfeeds from eachother.\n>>> ")
			   self.url = raw_input("Enter url to the feed.\n>>> ")
		   except:
			   print "Error entering data,\n \tYOU WIN!"
	   try:
		   self.rss.download(self.url, self.name)
	   except:
		   print "Error: Could not add feed to database."
		   print "Are you sure the data entered is correct?"
   def updateFeed(self):
	   try:
		   self.listOfNameAndUrl = self.rss.getNameAndUrl()
		   self.listOfName = self.listOfNameAndUrl[0]
		   self.listOfUrl = self.listOfNameAndUrl[1]
		   try:
			   self.choice = raw_input(\
					   "Please choose:\
  \n1\tUpdate all\
  \n2\tSelect")
			   if self.choice == "1":
				   for i in range(0, len(self.listOfName)):
					   self.rss.download(self.listOfUrl[i], self.listOfName[i])
			   if self.choice == "2":
				   for i in range(0, len(self.listOfName)):
					   print "#%s - %s" % (str(i+1), self.listOfName[i])
				   self.choice = raw_input("Please list the \
  feeds you \nwant to update, use space to seperate.\n>>> ")
				   self.choice = self.choice.split(" ")
				   for i in range(0, len(self.choice)):
					   print "Updating: %s" % self.listOfNames\
					   [int(self.choice[i])-1]
					   self.rss.download(self.listOfUrl[int\
					   (self.choice[i])-1], self.listOfNames\
					   [int(self.choice[i])-1])
		   except:
			   print "Error: Only enter integers."

	   except:
		   print "ER: Error retriving info from database."
		   raw_input("Try to add a feed.")

   def prefrences(self):
	   try:
		   self.config = open('.rcpxml')
		   while True:
			   self.line = self.config.readline()
			   if len(self.line) == 0:
				   break
			   if self.line.startswith('showing_x_lines'):
				   self.showing_x_lines = line
				   self.showing_x_lines = self.showing_x_lines.\
						   replace('showing_x_lines ','')
		   self.config.close()
	   except:
		   print "Could not load config-file."
	   print "=============================="
	   print "This will decide how many items from a seed that is show."
	   print "\t-Entering 0 will print all."
	   print "\t-Only pressing enter will leave unchanged."
	   print "Currently", self.showing_x_lines, "is chosen."
	   self.wanted_showing_x_lines = raw_input(">>> ")
	   try:
		   if self.wanted_showing_x_lines == "0":
			   self.showing_x_lines = 0
		   elif int(self.wanted_showing_x_lines) > 0:
			   self.showing_x_lines = int(self.wanted_showing_x_lines)
	   except:
		   print "ER: Could not change option."
		   print "Onlt use integer."
	   try:
		   self.config = open('.rcpxml','w')
		   self.temp = "showing_x_lines" + str(self.showing_x_lines)
		   self.config.write(self.temp)
		   self.config.close()
	   except:
		   print "ER: Error saving config-file."
		   raw_input("Setting probaly not saved, try to save again.")

  def cligui():   
   feed = client()
   feed.start()
   igjen = True
   while igjen:
	   print "=============================="
	   print "Menu:"
	   print "1\tView feed"
	   print "2\tAdd feed"
	   print "3\tUpdate feed(s)"
	   print "4\tSettings"
	   print "5\tExit"
	   choice = raw_input(">>> ")
	   try:
		   if choice == "5":
			   igjen = False 
		   elif choice == "4":
			   feed.prefrences()
		   elif choice == "3":
			   feed.updateFeed()
		   elif choice == "2":
			   feed.addItem(True)
		   elif choice == "1":
			   feed.showFeed(False)
	   except:
		   print "An unknown error occured."

  def clicmd():
   arg = []
   for i in range(1, len(sys.argv)):
	   arg.append(sys.argv[i])

   if arg[0] == "-a" or arg[0] == "--add":
	   if len(arg) == 3:
		   feed = client()
		   feed.start()
		   url = arg[1]
		   name = arg[2]
		   feed.url = url
		   feed.name = name
		   feed.addItem(True)
   elif arg[0] == "-p" or arg[0] == "--print":
	   if len(arg) == 2 or len(arg) == 4:
		   feed = client()
		   feed.start()
		   name = arg[1]
		   feed.wantedTableName = name
		   if len(arg) == 4:
			   n = arg[3]
			   feed.showing_x_lines = int(n)
		   feed.showFeed(True)
 else:
	   print """You can controll pxml with arguments so you do not have to go through all the menus. Here are the available arguments:
   -h, --help:\n\tdisplay this
   -a, --add  url name:\n\tadds the feed to database
   -p, --print  name -n n:\n\tprints the feed "name" out, -n(optinal) sets number of items to be printed out."""

  if __name__ == "__main__":
   if len(sys.argv) > 1:
	   clicmd()
   else:
	   cligui()

 

Klikk for å se/fjerne innholdet nedenfor

   #!/usr/bin/env python
  # -*- coding: UTF-8 -*-
  """modPxml.py is a module that download,
  save and returns information from xml-feeds"""

  import os
  import codecs
  from pysqlite2 import dbapi2 as sqlite

  def removeHTML(text):
   text = text.replace('<', '<')
   text = text.replace('>', '>')
   text = text.replace('&', '&')
   text = text.replace(''', "'")
   text = text.replace('"', '"')
   return text

  class pxml:
   def download(self, url, name):
	   connection = sqlite.connect('pxml.db')
	   cursor = connection.cursor()
	   try:
		   cursor.execute('CREATE TABLE info \
				   (id INTEGER PRIMARY KEY, \
				   name VARCHAR(20),\
				   url VARCHAR(100), \
				   xmlversion VARCHAR(5),\
				   rssversion VARCHAR(5), \
				   title VARCHAR(50), \
				   link VARCHAR(60), \
				   description VARCHAR(100), \
				   language VARCHAR(20), \
				   subdate VARCHAR(40), \
				   lastbuild VARCHAR(40), \
				   generator VARCHAR(40), \
				   managerinfo VARCHAR(50), \
				   webmaster VARCHAR(50))')
	   except:
		   something = 22 # Dont have anything better to do... 
	   try:
		   os.remove('temp.xml')
	   except:
		   a = 22
	   ###########################################
	   # Download to file, import file to string,#
	   # manipulate string, split to list		#
	   command = "os.system('wget -q -O temp.xml %s')" % url 
	   exec command
	   f = open('temp.xml')
	   contentOfFile = ""
	   while True:
		   line = f.readline()
		   if len(line) == 0:
			   break
		   contentOfFile = contentOfFile + line
	   contentOfFile = contentOfFile.decode('UTF-8','ignore') 
	   contentOfFile = contentOfFile.replace('<![CDATA[', '[!CDATA[') 
	   contentOfFile = contentOfFile.replace('\n', ' ') 
	   listOfContent = contentOfFile.split("<") 
	   ################################################
	   # image-tags are not supported, seek'n'destory:#
	   listOfLineToDelete = []
	   record = False
	   while True:
		   record = False
		   for i in range(0, len(listOfContent)):
			   if listOfContent[i].startswith("image>"):
				   record = True
			   if listOfContent[i].startswith("item>") \
					   or listOfContent[i].startswith("/image>"):
				   break
			   if record == True:
				   listOfLineToDelete.append(i)
		   if record != True:
			   break
		   for i in range(len(listOfLineToDelete)):
			   listOfContent.pop(listOfLineToDelete[0])
	   ##########################################################
	   # First we find out what there is to know about the feed.#
	   # Iterate through list until we hit first item.		  #
	   # Things that match tag is saved in apropiat strings,	#
	   # and in the end added to the "info"-table.			  #
	   xmlversion = ""; rssversion = ""; title = ""; description = ""
	   language = ""; pubdate = ""; lastbuild = ""; generator = ""
	   managingeditor = ""; webmaster = ""
	   for line in listOfContent:
		   if line.startswith("item>"): 
			   break
		   elif line.startswith("?xml version"):
			   xmlversion = line
			   xmlversion = xmlversion[14:17]
		   elif line.startswith("rss version="):
			   rssversion = line
			   rssversion = rssversion[13:16]
		   elif line.startswith("link>"):
			   link = line
			   link = link.replace("link>", '')
		   elif line.startswith("title>"):
			   title = line
			   title = title.replace("title>", '')
		   elif line.startswith("description>"):
			   description = line
			   description = description.replace("description>", '')
		   elif line.startswith("language>"):
			   language = line
			   language = language.replace("language>", '')
		   elif line.startswith("pubDate>"):
			   pubdate = line
			   pubdate = pubdate.replace("pubDate>", '')
		   elif line.startswith("lastBuildDate>"):
			   lastbuilddate = line
			   lastbuilddate = lastbuilddate.replace("lastBuildDate>", '')
		   elif line.startswith("generator>"):
			   generator = line
			   generator = generator.replace("generator>", '')
		   elif line.startswith("managingEditor>"):
			   managingeditor = line
			   managingeditor = managingeditor.replace("managingEditor>", '')
		   elif line.startswith("webMaster>"):
			   webmaster = line
			   webmaster = webmaster.replace("webMaster>", '')
	   try:
		   number = "" 
		   cursor.execute('SELECT * FROM info')
		   for row in cursor:
			   if  name == row[1]:
				   number = str(row[0])
		   if number != '':
			   cursor.execute('DELETE FROM info WHERE id = ?', (number))
	   finally:
		   cursor.execute('INSERT INTO info VALUES \
				   (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', \
				   (name, url, xmlversion, rssversion, title, link, \
				   description, language, pubdate, lastbuild, generator, \
				   managingeditor, webmaster))
	   ####################################################
	   # Since we now know the information about the feed,#
	   # we delete everything untill first item.		  #
	   num = 0
	   i = 0
	   while True:
		   if listOfContent[i].startswith("item>"):
			   break
		   num += 1
		   i += 1
	   for i in range(num):
		   del listOfContent[0]
	   ###########################################
	   # Now we goes loop through the items.	 #
	   # In the same way as with the info,	   #
	   # we check each line for tags and		 #
	   # adds what we find to strings.		   #
	   # When we reach a new item, what we have  #
	   # found is written to database, and	   #
	   # the variables is emptied for a new item.#
	   nameForSQL = '"' + name + '"'
	   try:
		   cursor.execute('CREATE TABLE %s \
				   (id INTEGER PRIMARY KEY, \
				   title VARCHAR(100), \
				   link VARCHAR(100), \
				   description VARCHAR(200), \
				   guid VARCHAR(40), \
				   pubdate VARCHAR(40), \
				   author VARCHAR(30), \
				   category VARCHAR(30), \
				   comments VARCHAR(100))'\
				   % (nameForSQL))
	   except:
		  something = "0"
	   title = "";link = ""; description = ""
	   guid = ""; pubDate = ""; author = ""
	   category = ""; comments = ""
	   for line in listOfContent:
		   if line.startswith("/item>"):
			   cursor.execute('INSERT INTO %s VALUES \
					   (null, ?, ?, ?, ?, ?, ?, ?, ?)' \
					   % (nameForSQL), \
					   (title, link, description, guid,\
					   pubDate, author, category, comments))
			   title = ""
			   link = ""
			   description = ""
			   guid = ""
			   pubDate = ""
			   author = ""
			   category = ""
			   comments = ""
		   elif line.startswith("title>"):
			   title = line
			   title = title.replace("title>", '')
			   if title.startswith('[!CDATA['):
				   title = title.replace('[!CDATA[', '')
				   title = title.replace(']]', '')
			   else:
				   title = removeHTML(title)
		   elif line.startswith("link>"):
			   link = line
			   link = link.replace("link>", '')
		   elif line.startswith("description>"):
			   description = line
			   description = description.replace("description>", '')
			   if description.startswith('[!CDATA['):
				   description = description.replace('[!CDATA[', '')
				   description = description.replace(']]>', '')
			   else:
				   description = removeHTML(description)
		   elif line.startswith("guid>"):
			   guid = line
			   guid = guid.replace("guid>", '')
		   elif line.startswith("pubDate>"):
			   pubDate = line
			   pubDate = pubDate.replace("pubDate>", '')
		   elif line.startswith("author>"):
			   author = line
			   author = author.replace("author>", '')
			   if author.startswith('[!CDATA'):
				   author = author.replace('[!CDATA[', '')
				   author = author.replace(']]>', '')
			   else:
				   author = removeHTML(author)
		   elif line.startswith("category>"):
			   category = line
			   category = category.replace("category>", '')
			   if category.startswith('[!CDATA['):
				   category = category.replace('[!CDATA[', '')
				   category = category.replace(']]>', '')
			   else:
				   category = removeHTML(category)
		   elif line.startswith("comments>"):
			   comments = line
			   comments = comments.replace("comments>", '')
	   ##########################################################
	   # Finnished with updating, save and close the connection #
	   # with database.										 #
	   connection.commit()
	   cursor.close()
	   connection.close()

   def namesOfTables(self):
	   connection = sqlite.connect('pxml.db')
	   cursor = connection.cursor()
	   ########################
	   # Selec
	   cursor.execute('SELECT name FROM info') 
	   listOfTableNames = []
	   for row in cursor:
		   listOfTableNames.append(row[0])
	   cursor.close()
	   connection.close()
	   return listOfTableNames

   def getInfo(self, name,listOfWanted):
	   listId = []; listTitle = []; listLink = []; listDescription= []
	   listGuid = []; listDate = []; listAuthor = []; listCategory = []
	   listComments = []
	   connection = sqlite.connect('pxml.db')
	   cursor = connection.cursor()
	   name = '"' + name + '"'
	   cursor.execute('SELECT * FROM %s' % name)
	   for row in cursor:
		   if listOfWanted[0] != 0:
			   listId.append(row[0])
		   if listOfWanted[1] != 0:
			   listTitle.append(row[1])
		   if listOfWanted[2] != 0:
			   listLink.append(row[2])
		   if listOfWanted[3] != 0:
			  listDescription.append(row[3])
		   if listOfWanted[4] != 0:
			   listGuid.append(row[4])
		   if listOfWanted[5] != 0:
			   listDate.append(row[5])
		   if listOfWanted[6] != 0:
			   listAuthor.append(row[6])
		   if listOfWanted[7] != 0:
			   listCategory.append(row[7])
		   if listOfWanted[8] != 0:
			   listComments.append(row[8])
	   cursor.close()
	   connection.close()
	   listToReturn = []
	   if listOfWanted[0] != 0:
		   listToReturn.append(listId)
	   if listOfWanted[1] != 0:
		   listToReturn.append(listTitle)
	   if listOfWanted[2] != 0:
		   listToReturn.append(listLink)
	   if listOfWanted[3] != 0:
		   listToReturn.append(listDescription)
	   if listOfWanted[4] != 0:
		   listToReturn.append(listGuid)
	   if listOfWanted[5] != 0:
		   listToReturn.append(listDate)
	   if listOfWanted[6] != 0:
		   listToReturn.append(listAuthor)
	   if listOfWanted[7] != 0:
		   listToReturn.append(listCategory)
	   if listOfWanted[8] != 0:
		   listToReturn.append(listComments)
	   return listToReturn
   def getNameAndUrl(self):
	   connection = sqlite.connect('pxml.db')
	   cursor = connection.cursor()
	   cursor.execute('SELECT name, url FROM info')
	   listName = []; listUrl = []
	   for row in cursor:
		   listName.append(row[0])
		   listUrl.append(row[1])
	   listToReturn = [listName, listUrl]
	   cursor.close()
	   connection.close()
	   return listToReturn


  if __name__ == "__main__":
   print "This is a module!"
   quit()

 

Tror nok det finnes mer elegante måter å gjøre det på. :p

Lenke til kommentar

Flott å se at denne tråden enda er aktiv, og at folk føler de har noe igjen for den! :)

 

Men angående det mattematiske hintet til primtall:

Mattematisk hint:

 

 

Husk at halvparten av tallene er delbare på 2. Du trenger derfor bare å sjekke halvparten av tallene.

 

Dette er sant, men metoden din er også ikke det mest optimale. Tidskompleksiteten til denne algoritmen vil være O(n) for å verifisere at et tall er et primtall. Nedenfor viser jeg en metode som reduserer dette til O(sqrt(n)) for å verifisere at et tall er et primtall.

 

Anta at et tall n, kan deles på k hvor 1 < k < n. Da kan også n / k dele n, fordi begge vil være faktorer, og (n / k) * k = n (Naturligvis). Anta så at k = n / 2. Da er naturligvis 2 den andre divisoren. Altså finnes det en "speiling" av alle divisorene. Det viser seg at enten:

1) k < sqrt(n) => n / k > sqrt(n) fordi sqrt(n) * sqrt(n) = n.

2) k > sqrt(n) => n / k < sqrt(n) av samme grunn.

3) k = sqrt(n) => n / k = k.

 

Med andre ord, hvis du har sjekket alle divisorene opp til (og med) sqrt(n), og ingen deler n, så er n et primtall.

 

La oss videre anta at vi vil sjekke alle tallene opp til 50 om de er primtall. Vi definerer her 0, og 1 til ikke å være primtall. La oss videre si at tallene er sortert i stigende rekkefølge, slik at 2 ligger først, for øyeblikket. Så sjekker vi om noen av tallene som er mindre enn eller lik sqrt(2) kan dele 2, og det er ingen av dem i vår rekke, så vi markerer 2 som et primtall. Deretter sjekker vi det samme for 3, det kan heller ikke deles, så vi står nå med:

2 3 4 5 ...

4 kan derimot deles på 2, så vi setter inn 0 her.

2 3 0 5 ...

Fortsett slik, og du har en tidskompleksitet på O(n * sqrt(n)) som er relativt god.

Du må naturligvis ikke dele på 0 underveis, og når du vil returnere resultatet, bør du filtrere ut 0'ene, for eksempel slik:

return filter(lambda x: x != 0, tall)

 

Les mer om denne algorithmen på http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

 

Som hotstian nevne, kan vi eliminere halvparten av tallene allerede fra starten av. Faktisk, kan vi eliminere 1/2 + 1/3 - 1/15 = 23/30 av tallene, trivielt (Mer enn dette blir vanskelig...)

 

En funksjon som finner primtall kan dermed se slik ut:

def primtall(n):
kandidater = [0] * n # n er antall ønsket kandidater.
kandidater[:3] = [2, 3, 5]
for i in xrange(3, len(kandidater)):
	if i % 2: # Alle odde indekser
		kandidater[i] = kandidater[i - 1] + 2
	else: # Alle par indekser
		kandidater[i] = kandidater[i - 1] + 4
# Bruk sieve of Erastosthenes:
grense = sqrt(kandidater[-1])
i = 0
while i <= grense:
	if kandidater[i]: # Del aldri på 0.
		for j in xrange(i + 1, len(kandidater)):
			if kandidater[j]: # Sjekk at vi ikke har fjernet dette tallet allerede
				if kandidater[j] % kandidater[i] == 0: # Fjern
					kandidater[j] = 0
	i += 1
return filter(lambda x: x, kandidater)

 

Fordi vi eliminerer 23 / 30 tall før vi begynner, vil resultatet ha iterert over (30 / 7) * n tall.

Vi kan bruke x / ln(x) til å estimere antallet primtall <= x.

 

Dette er stygg python kode, ikke skriv slikt ellers ;) men den er rimelig effektivt.

Kan komme til nytte på senere tidspunkt.

 

 

 

Har forøvrig gjort en god del av oppgavene på project euler (under nicket qebab), så hvis man ønsker tips er det bare å poste her :)

Lenke til kommentar

Heisann, jeg måtte bare registrere meg da jeg så denne posten.

Python så gøy ut og jeg har erfaring fra php scripting og bash så jeg tenke å hoppe uti og ta utfordringen fra første side. Det her er første gangen jeg har prøvd på python så nå sitter jeg litt fast.

 

Jeg har laget en socket "server" som lytter på en port og en client som kan sende tekst strenger til serveren, men det jeg trenger er et lite hint om hvordan jeg kan koble bruker id'er sammen. Altså så serveren veit hvor den skal sende meldinen.

 

Edit: Altså et IM system

 

Edit2: Jeg har tenkt litt på saken og tenker veldig php føler jeg. Men det jeg har kommet fram til er hvis jeg lager et "registrer bruker passord" opplegg som lagrer brukernavnet i en database og når du sender MSG bruker melding så legger serveren den i en database og et anna daemon ligger i bakgrunnen og konstant sjekker etter nye innlegg og sender de til riktig bruker. Kunne det funket eller finnes det raskere og bedre alternativ?

Endret av Jonas17
Lenke til kommentar

Strengt tatt ikke så Python relatert som nettverksrelatert (Ikke at det er noe problem). Dessverre noe jeg ikke kan altfor mye om, men jeg kan anbefale deg:

Unix Network Programming av W. Richard Stevens

Computer Networks av Andrew Tanenbaum

dersom du ønsker å lære mer om nettverk. :)

Lenke til kommentar
Heisann, jeg måtte bare registrere meg da jeg så denne posten.

Python så gøy ut og jeg har erfaring fra php scripting og bash så jeg tenke å hoppe uti og ta utfordringen fra første side. Det her er første gangen jeg har prøvd på python så nå sitter jeg litt fast.

 

Jeg har laget en socket "server" som lytter på en port og en client som kan sende tekst strenger til serveren, men det jeg trenger er et lite hint om hvordan jeg kan koble bruker id'er sammen. Altså så serveren veit hvor den skal sende meldinen.

 

Edit: Altså et IM system

 

Edit2: Jeg har tenkt litt på saken og tenker veldig php føler jeg. Men det jeg har kommet fram til er hvis jeg lager et "registrer bruker passord" opplegg som lagrer brukernavnet i en database og når du sender MSG bruker melding så legger serveren den i en database og et anna daemon ligger i bakgrunnen og konstant sjekker etter nye innlegg og sender de til riktig bruker. Kunne det funket eller finnes det raskere og bedre alternativ?

 

Du kan jo lage en tråd istede for en ny daemon og du kan bruke minne fremfor database. Ellers er den vel egentlig grei.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...