Return statement i IF-sats

Här diskuteras programmering och utveckling
Heretic
Inlägg: 170
Blev medlem: 08 mar 2007, 00:25

Return statement i IF-sats

Inlägg av Heretic »

Kräver PyQT

Hej, jag har ett litet problem. Jag vill att mitt program ska fungera som en terminal.

Programmet ska fråga mej vad jag vill göra. Sen ska jag välja ett alternativ, men den ska ändå fråga mej vad jag vill göra härnäst. Väljer jag 1 som är att starta programmet, då ska den sedan fråga "Vad vill du göra?" sen får jag välja om vill stänga ner programmet.

En sak till. Hur gör man så man kan bara välja 1:an en gång? Alltså man kan inte starta programmet två gånger. Då ska den få ett meddelande att "Den är redan aktiv."

Kod: Markera allt

import sys
from PyQt4 import QtGui,QtCore,QtWebKit 
import url
listOfUrls = url.urlen()  #Import list of Urls


username = raw_input('MoneyMaker login password?: ')
if username == "hello":
    print "Welcome to the MoneyMaker"
else:
    print "Wrong password - Closing"
    raw_input("Press Enter to Exit")
    sys.exit()

def opptions():
	print "1: Start \n2: View how money the program have make \n3: Shutdown MoneyMaker"
	x = input('What do you want to do?: ')
    
if  x == 1:
	print "Starting MoneyMaker"
	return opptions
	
if x == 2:
	print "Money is 43543" 
	return opptions
		
if x == 3:
	print "The MoneyMaker will shutdown now..."
	raw_input("Press Enter to Exit")
	sys.exit()
	    
class Ui_TabWidget(QtGui.QTabWidget):        
    def __init__(self,parent=None):
        QtGui.QTabWidget.__init__(self,parent)

        self.setObjectName("MoneyMaker")
        self.resize(1000, 700)
        self.setWindowTitle(QtGui.QApplication.translate("MoneyMaker", "MoneyMaker", None, QtGui.QApplication.UnicodeUTF8))

        #Creating the tabbar
        self.tabBar=QtGui.QTabBar(self)

        #Adding the 1 tab
        self.tabBar.addTab("tab1")
        self.tabBar.setTabText(0,"1")

        #The widget intended for tab1
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[0]))
        
        #Adding the 2 Tab
        self.tabBar.addTab("tab2")
        self.tabBar.setTabText(1,"2")

        #The widget intended for tab2
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[1]))

        
        #Adding the 3 tab
        self.tabBar.addTab("tab3")
        self.tabBar.setTabText(2,"3") 
       
        #The widget intended for tab3
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[2]))

        #Adding the 4 tab
        self.tabBar.addTab("tab4")
        self.tabBar.setTabText(3,"4")
        
        #The widget intended for tab4
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl('http://www.google.com'))
        
        #Adding the tabbar to the tabwidget
        self.setTabBar(self.tabBar)

        self.tabBar.setMovable(True)
        self.setCurrentIndex(0)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ui = Ui_TabWidget()
    ui.show()
    sys.exit(app.exec_())
    

Den här coden heter url.py

Kod: Markera allt

def urlen():
    listOfUrls = ["http://www.google.com", #0 Google.com
    "http://www.thenewboston.com",         #1 Thenewboston.com
    "https://www.flashback.org/f77"]       #2 Flashback - Politik Inrikes
    return listOfUrls
 
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Return statement i IF-sats

Inlägg av Osprey »

Jag vet inte riktigt om jag förstår hur du vill att det ska funka och det finns fortfarande en hel del att fixa med och att snygga till...

Jag fixade till lite i din kod och du kan kanske börja med något som ser ut så här:

Kod: Markera allt

#! /usr/bin/python
#
import sys, os, signal
from PyQt4 import QtGui,QtCore,QtWebKit 
import url
import urlen

listOfUrls = urlen.getUrl()  #Import list of Urls

global STARTED
STARTED = False

def opptions():
    print "1: Start \n2: View how money the program have make \n3: Shutdown MoneyMaker"
    x = input('What do you want to do?: ')

    while (True):
        if (x == 1):
            print "Starting MoneyMaker"
            break

        elif (x == 2):
            print "Money is 43543"
            break

        elif (x == 3):
            print "The MoneyMaker will shutdown now..."
            break

        else:
            print "Unknown function"

    return x

class Ui_TabWidget(QtGui.QTabWidget):        

    def __init__(self,parent=None):

        QtGui.QTabWidget.__init__(self,parent)

        self.setObjectName("MoneyMaker")
        self.resize(1000, 700)
        self.setWindowTitle(QtGui.QApplication.translate("MoneyMaker", "MoneyMaker", None, QtGui.QApplication.UnicodeUTF8))

        #Creating the tabbar
        self.tabBar=QtGui.QTabBar(self)

        #Adding the 1 tab
        self.tabBar.addTab("tab1")
        self.tabBar.setTabText(0,"1")

        #The widget intended for tab1
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[0]))
        
        #Adding the 2 Tab
        self.tabBar.addTab("tab2")
        self.tabBar.setTabText(1,"2")

        #The widget intended for tab2
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[1]))

        
        #Adding the 3 tab
        self.tabBar.addTab("tab3")
        self.tabBar.setTabText(2,"3") 
       
        #The widget intended for tab3
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl(listOfUrls[2]))

        #Adding the 4 tab
        self.tabBar.addTab("tab4")
        self.tabBar.setTabText(3,"4")
        
        #The widget intended for tab4
        self.wb = QtWebKit.QWebView()
        self.addTab(self.wb,"")
        self.wb.setUrl(QtCore.QUrl('http://www.google.com'))
        
        #Adding the tabbar to the tabwidget
        self.setTabBar(self.tabBar)

        self.tabBar.setMovable(True)
        self.setCurrentIndex(0)


class main():
    def __init__(self):

        global STARTED

        username = raw_input('MoneyMaker login password?: ')
        if username == "hello":
            print "Welcome to the MoneyMaker"
        else:
            print "Wrong password - Closing"
            raw_input("Press Enter to Exit")
            sys.exit()

        while (True):
            z = opptions()
            if (z == 1):
                if (STARTED == False):
                    PID = os.fork()
                    if (PID):
                        STARTED = True
                    else:
                        app = QtGui.QApplication(sys.argv)
                        ui = Ui_TabWidget()
                        ui.show()
                        sys.exit(app.exec_())
                else:
                    print "Already started"

            elif (z == 2):
                pass

            elif (z == 3):
                raw_input("Press Enter to Exit")
                os.kill(PID,signal.SIGKILL)
                sys.exit()

main()
Och med en fil som heter "urlen.py" som ser ut så här:

Kod: Markera allt

#! /usr/bin/python
#
def getUrl():
    listOfUrls = ["http://www.google.com", #0 Google.com
        "http://www.thenewboston.com",         #1 Thenewboston.com
        "https://www.flashback.org/f77"]       #2 Flashback - Politik Inrikes
    return listOfUrls
Jag hoppas att det kan vara lite hjälp... :)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Return statement i IF-sats

Inlägg av mcNisse »

Du kan inte göra return från huvudprogrammet, det måste vara i en funktion så som det ser ut som Osprey gjort.
Om du vill avsluta programmet tidigare får du använda sys.exit(0) (du har ju använt det på ett ställe). Nollskilt om det är något fel.
Heretic
Inlägg: 170
Blev medlem: 08 mar 2007, 00:25

Re: Return statement i IF-sats

Inlägg av Heretic »

Ja tackar Osprey :)

Fast nu har jag ju gått över till textbaserat, vilket är mycket enklare. Jag har modifierat koden lite.

Kod: Markera allt

import urllib2
import sys, os, signal
import urlen

# Import list of Urls

listOfUrls = urlen.getUrl()  #Import list of Urls

global STARTED
STARTED = False

def opptions():
    print "1: Start \n2: View how money the program have make \n3: Shutdown MoneyMaker"
    x = input('What do you want to do?: ')

    while (True):
        if (x == 1):
            print "Starting MoneyMaker"
            break

        elif (x == 2):
            print "Money is 43543"
            break

        elif (x == 3):
            print "The MoneyMaker will shutdown now..."
            break

        else:
            print "Unknown function"

    return x        
                     
      
class main():
    def __init__(self):

        global STARTED

        username = raw_input('MoneyMaker login password?: ')
        if username == "hello":
            print "Welcome to the MoneyMaker"
        else:
            print "Wrong password - Closing"
            raw_input("Press Enter to Exit")
            sys.exit()

        while (True):
            z = opptions()
            if (z == 1):
                if (STARTED == False):
                    STARTED = True 
                    
            elif (STARTED == True):
                print "Already started"

            elif (z == 2):
                pass

            elif (z == 3):
                raw_input("Press Enter to Exit")
                sys.exit()

main()

# Adding a url

google = urllib2.urlopen(listOfUrls[0]) 
for i,line in enumerate(google):
    if i == 96:
        print line
    if i == 208:
        print line  


Problemet är att om man skriver 1 så säger den att programmet är startat. Fast den hoppar inte ner till google = urllib2.urlopen(listOfUrls[0])

Det andra problemet är att om man skriver 432 så skriver den "Unknow function" flera gånger. Det går inte få stopp på ;D Sen om man skriver med bokstäver så får man error.

Det andra problemet är att jag vet inte hur man söker efter en viss vald HTML text på google(eller någon annan sida) och ta ur vissa ord/siffror och spara det i en lista på en annan python fil. Det ska alltså uppdateras varje 30:e sekund (typ time.sleep(30) och sen göra om det igen)) för att kolla så om en viss text/siffror ändras hela tiden, eller om den inte gör det.

Exempel.
Jag vill söka efter

Kod: Markera allt

class=gb2>Bloggar</a> <a id="gb_92"
Sen vill jag spara 92 i en lista i en annan python file. Sen kolla sedan efter 30 sekunder om det står fortfarande 92 på

Kod: Markera allt

class=gb2>Bloggar</a> <a id="gb_92"


Edit: Opps, found it
http://docs.python.org/library/re.html



På funktion 2 så är den rätt, men print ska jag ersätta med

Kod: Markera allt

f = open('/tmp/workfile/fil.txt', 'w')
print f
Men du ska ha ett stort tack iallafall ;)
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Return statement i IF-sats

Inlägg av Osprey »

Om du kör texbaserat så tycker jag att du ska gå över från Python(2) till Python3. Anledningen till att jag inte föreslog det förra gången var bara att stödet för PyQt4 ännu inte är komplett i Python3, men i övrigt så är det en bra bit bättre och modernare. Och förutom just PyQt4 så finns det stöd för massor i Py3 och det växer hela tiden... ;)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Heretic
Inlägg: 170
Blev medlem: 08 mar 2007, 00:25

Re: Return statement i IF-sats

Inlägg av Heretic »

Nu har jag ett litet problem till. Tog en liten paus från ämnet ;D

Kod: Markera allt

import urllib2
import sys, os, signal
import urlen

username = raw_input('MoneyMaker login password?: ')
if username == "hello":
    print "Welcome to the MoneyMaker \nMoneyMaker is ON..."
else:
    print "Wrong password - Closing"
    raw_input("Press Enter to Exit")
    sys.exit()    
    
# Import list of Urls    
listOfUrls = urlen.getUrl()  #Import list of Urls
    
# Adding a url
def returnstatment():
	google = (/loggs, "google.py"
	webb0 = urllib2.urlopen(listOfUrls[0]) 
	        /* kommando för att söka efter en viss lång mening i webb0*/
			/* kommando för att plocka ut ett visst tal ur en lång mening eller rad*/ ???
			listan = webb0(sök för en mening)
			listan2 = list(listan)
			listan2[43] + listan2[44] =listan3
			#Det här ovan är exempel.
			file = open(google, 'w')
			x = len(listan3)
			while (True):
				if x = 50:
					file.write(line[x])
				else:
					x = x + 1
			y = len(google)
			if y > 50:
				del google[0]
			file.close()
			/* starta en annan py-fil som har en function som läser listan*/ 
			
			
	return returnstatement


Den ska alltså loopa om och om igen hela tiden. Sen ska den gå in i en mapp och öppna en py fil som heter google.py och skriva in talet i en lista. Skrivs ett nytt tal in i listan, så ska det äldsta talet raderas.

Detta är mest bara exempel på hur jag hade tänkt det. Ni kanske förstår den ändå?
Skriv svar

Återgå till "Programmering och webbdesign"