Python?
Python?
Jag försöker lära mig hur man programmerar i Python. Jag har kommit till stadiet då jag bara sitter och provar lite kommandon i "Command Line Version" 3.1, men nu tänkte jag försöka göra lite mer avancerade saker.
1. Hur öppnar man .py-filer i ubuntu? Det står överallt att man ska "leta upp" filen med python, men om man använder Command Line Version, hur gör man då? Jag har gjort en fil som heter Ny.py och lagt den på skrivbordet, vad ska jag göra för att köra den som Python-kod?
2. Hur loopar jag kod tills ett kriterium har uppnåtts? T ex, om jag vill addera 1 till ett tal tills talet blir 5
tal = 1
tal = tal + 1
tal = tal + 1
osv...
3. Hur gör jag så att jag döper nånting till "sak#", där # är värdet på tal just i den stunden?
sak(tals värde) = 5
tal = tal + 1
sak(tals värde) = 10
tal = tal + 1
osv...
Tacksam för svar!
1. Hur öppnar man .py-filer i ubuntu? Det står överallt att man ska "leta upp" filen med python, men om man använder Command Line Version, hur gör man då? Jag har gjort en fil som heter Ny.py och lagt den på skrivbordet, vad ska jag göra för att köra den som Python-kod?
2. Hur loopar jag kod tills ett kriterium har uppnåtts? T ex, om jag vill addera 1 till ett tal tills talet blir 5
tal = 1
tal = tal + 1
tal = tal + 1
osv...
3. Hur gör jag så att jag döper nånting till "sak#", där # är värdet på tal just i den stunden?
sak(tals värde) = 5
tal = tal + 1
sak(tals värde) = 10
tal = tal + 1
osv...
Tacksam för svar!
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Från pythons egna kommandorad:Feilin skrev:1. Hur öppnar man .py-filer i ubuntu? Det står överallt att man ska "leta upp" filen med python, men om man använder Command Line Version, hur gör man då? Jag har gjort en fil som heter Ny.py och lagt den på skrivbordet, vad ska jag göra för att köra den som Python-kod?
Kod: Markera allt
exec(open("/sökväg/till/filen.py").read())
Kod: Markera allt
python /sökväg/till/filen.py
Om du vill kunna starta skriptet genom att dubbelklicka på det så måste du till att börja med se till så att första raden i filen ser ut så här:
Kod: Markera allt
#!/usr/bin/python
Feilin skrev:2. Hur loopar jag kod tills ett kriterium har uppnåtts? T ex, om jag vill addera 1 till ett tal tills talet blir 5
tal = 1
tal = tal + 1
tal = tal + 1
osv...
Kod: Markera allt
tal = 1
while tal < 5:
tal += 1
Feilin skrev:3. Hur gör jag så att jag döper nånting till "sak#", där # är värdet på tal just i den stunden?
sak(tals värde) = 5
tal = tal + 1
sak(tals värde) = 10
tal = tal + 1
osv...
Kod: Markera allt
sak = {}
sak[tal] = 5
tal += 1
sak[tal] = 10
tal += 1
- Luxwarp
- Inlägg: 591
- Blev medlem: 16 nov 2007, 02:05
- OS: Ubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Göteborg
- Kontakt:
Re: Python?
http://www.linuxwiki.se/index.php/Bli_ormtjusare
Där har du nog sveriges bästa python guide på nätet. Går igenom allt som du behöver veta, grundläggande. Har använt den många gånger och även folk i klassen som vill lära sig python när dom vill ha ett enkelt scriptspråk:)
Där har du nog sveriges bästa python guide på nätet. Går igenom allt som du behöver veta, grundläggande. Har använt den många gånger och även folk i klassen som vill lära sig python när dom vill ha ett enkelt scriptspråk:)
--------------------------------------
Luxwarp (fd. Zifilion / MMCarlsson)
IT Consultant and Web developer.
Check out my blog about Ubuntu, development, tips, tech and all my projects over at https://codeiolo.org
Luxwarp (fd. Zifilion / MMCarlsson)
IT Consultant and Web developer.
Check out my blog about Ubuntu, development, tips, tech and all my projects over at https://codeiolo.org
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Python?
Vill bara lägga till en variant som kan vara bra när man vill skriva skript för installationer som inte har python i /usr/bin.Konservburk skrev:Om du vill kunna starta skriptet genom att dubbelklicka på det så måste du till att börja med se till så att första raden i filen ser ut så här:Kod: Markera allt
#!/usr/bin/python
Kod: Markera allt
#!/usr/bin/env python
Re: Python?
AH! Tack!!!
Nu fick kom jag på att jag varit så slarvig och ignorerat att "S" i "Skrivbord" när jag skriver sökvägen är versalt... Som amatör kan det kännas lite onödigt att den ska vara skriftlägeskänslig, men det finns säkert en baktanke med det också.
Kom till många insikter tack vare era poster, många tack! Nu fattar jag t ex att " " gör att man kan ha flera kommandorader som hänger samman, vilket var bra att upptäcka...
Dock är jag inte helt hundra vad som menas med
#!/usr/bin/python
Hur använder jag den? Att dubbelklicka gör i nuläget att jag får upp den i gedit. Vad ska man öppna den med?
Tack för guiden! Egentligen brukar jag inte läsa guider, för de går ofta igenom sånt som inte är relevant, utan jag brukar försöka ta reda på vilka kommandon jag behöver använda och läsa på dem ett i taget. Finns det nåra bra listor med kommandon, där man har kort förklaring på vad det gör?
(edit)
En sak jag tänkte på; jag hittade en formel som slumpar tal (random.randint(a,b)), men den funkar av nån anledning inte, och jag får istället "random is not defined" som felmeddelande. Varför? Hur får jag random att funka?
Nu fick kom jag på att jag varit så slarvig och ignorerat att "S" i "Skrivbord" när jag skriver sökvägen är versalt... Som amatör kan det kännas lite onödigt att den ska vara skriftlägeskänslig, men det finns säkert en baktanke med det också.
Kom till många insikter tack vare era poster, många tack! Nu fattar jag t ex att " " gör att man kan ha flera kommandorader som hänger samman, vilket var bra att upptäcka...
Dock är jag inte helt hundra vad som menas med
#!/usr/bin/python
Hur använder jag den? Att dubbelklicka gör i nuläget att jag får upp den i gedit. Vad ska man öppna den med?
Tack för guiden! Egentligen brukar jag inte läsa guider, för de går ofta igenom sånt som inte är relevant, utan jag brukar försöka ta reda på vilka kommandon jag behöver använda och läsa på dem ett i taget. Finns det nåra bra listor med kommandon, där man har kort förklaring på vad det gör?
(edit)
En sak jag tänkte på; jag hittade en formel som slumpar tal (random.randint(a,b)), men den funkar av nån anledning inte, och jag får istället "random is not defined" som felmeddelande. Varför? Hur får jag random att funka?
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Det där förutsätter dock att env finns i /usr/bin och inte t.ex. direkt i /bin, samt även att katalogen där python ligger finns med i $PATH, vilket inte alls är säkert.mcNisse skrev:Vill bara lägga till en variant som kan vara bra när man vill skriva skript för installationer som inte har python i /usr/bin.Kod: Markera allt
#!/usr/bin/env python
Det ska vara första raden i filen. Den talar om att resten av filen ska tolkas av programmet /usr/bin/python.Feilin skrev:AH! Tack!!!
Dock är jag inte helt hundra vad som menas med
#!/usr/bin/python
Hur använder jag den?
Du måste göra filen körbar som jag beskrev i mitt förra inlägg. När du gjort det och dubbelklickar på den så kommer det upp en dialogruta där du kan välja att köra filen istället för att öppna den med gedit. Du kan välja mellan Kör i terminal och bara Kör. Skapar ditt python-skript inga egna fönster så kommer du inte att se något alls om du kör utan terminal. Tänk på att terminalen stängs direkt när ditt skript kört klart, vilket kan gå väldigt fört. Det är det som händer om du bara ser en terminal blinka förbi.Feilin skrev:Att dubbelklicka gör i nuläget att jag får upp den i gedit. Vad ska man öppna den med?
Innan du använder random måste du ha med raden:Feilin skrev:En sak jag tänkte på; jag hittade en formel som slumpar tal (random.randint(a,b)), men den funkar av nån anledning inte, och jag får istället "random is not defined" som felmeddelande. Varför? Hur får jag random att funka?
Kod: Markera allt
import random
Re: Python?
Återigen, tack för upplysningen! Nu funkar random finfint.
Dock så får jag inte upp en dialogruta med val, även efter jag gjorde den körbar. Det är inte iofs inte speciellt viktigt i nuläget.
Hur behåller jag ett värde mellan olika "methods" (kallas det så när man definierar nåra rader kod som man enkelt kan kalla upp sen?)? Koden börjar med att definiera ett värde som jag vill att den ska hålla koll på hur många gånger funktionen körs och sen i funktionen arbeta med värdet. Men när jag gör så klagar den bara på att "(...) is not defined", fast det är definierat (enligt mig). Hur löser man det problemet?
(edit)
Det verkar ha nåt att göra med "global variables", men jag har fortfarande inte kommit underfund med hur man skapar enkla sådana, som definerar variabeln "var" så att den ligger kvar. Hur gör man det?
Dock så får jag inte upp en dialogruta med val, även efter jag gjorde den körbar. Det är inte iofs inte speciellt viktigt i nuläget.
Hur behåller jag ett värde mellan olika "methods" (kallas det så när man definierar nåra rader kod som man enkelt kan kalla upp sen?)? Koden börjar med att definiera ett värde som jag vill att den ska hålla koll på hur många gånger funktionen körs och sen i funktionen arbeta med värdet. Men när jag gör så klagar den bara på att "(...) is not defined", fast det är definierat (enligt mig). Hur löser man det problemet?
(edit)
Det verkar ha nåt att göra med "global variables", men jag har fortfarande inte kommit underfund med hur man skapar enkla sådana, som definerar variabeln "var" så att den ligger kvar. Hur gör man det?
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Jag har dålig koll på det grafiska gränssnittet. Sist jag provade med en helt ny installation så fungerade det dock som jag beskrivit.Feilin skrev:Dock så får jag inte upp en dialogruta med val, även efter jag gjorde den körbar. Det är inte iofs inte speciellt viktigt i nuläget.
Jag är inte riktigt med på vad du är ute efter? Kan du visa upp kodsnutten som inte fungerar så kanske det framgår tydligare.Feilin skrev:Hur behåller jag ett värde mellan olika funktioner (kallas det så när man definierar nåra rader kod som man enkelt kan kalla upp sen?)? Koden börjar med att definiera ett värde som jag vill att den ska hålla koll på hur många gånger funktionen körs och sen i funktionen arbeta med värdet. Men när jag gör så klagar den bara på att "(...) is not defined", fast det är definierat (enligt mig). Hur löser man det problemet?
Är det något i den här stilen du är ute efter?Feilin skrev:(edit)
Det verkar ha nåt att göra med "global variables", men jag har fortfarande inte kommit underfund med hur man skapar enkla sådana, som definerar variabeln "var" så att den ligger kvar. Hur gör man det?
Kod: Markera allt
variabel = 0
def funktion():
global variabel
variabel += 1
print(variabel)
funktion()
funktion()
Kod: Markera allt
class klass():
def __init__(self):
self.variabel = 0
def __call__(self):
self.variabel += 1
print(self.variabel)
objekt = klass()
objekt()
objekt()
Re: Python?
Ok, såhär tror jag man kan förkorta kodsnutten:
Själva koden är mycket längre, så det var lättare att skriva ett exempel som jag tror illustrerar samma användning.
Kod: Markera allt
crn = {}
nmm = 1
import random
def ant(sta):
while sta > 0:
sak = random.randint(1,2)
if sak == 1:
crn[nmm] = 1
nmm += 1
sta -= 1
ant(3)
if crn[1]:
print("1an!")
if crn[2]:
print("2an med!")
if crn [3]:
print ("Till och med 3an!")
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Varför inte bara flytta in initieringen av nmm i funktionen?
Jag ändrade även if crn[1] till if 1 in crn (och motsvarande för 2 och 3) som gör mer det jag tror att du är ute efter.
Kod: Markera allt
crn = {}
import random
def ant(sta):
nmm = 1
while sta > 0:
sak = random.randint(1,2)
if sak == 1:
crn[nmm] = 1
nmm += 1
sta -= 1
ant(3)
if 1 in crn:
print("1an!")
if 2 in crn:
print("2an med!")
if 3 in crn:
print ("Till och med 3an!")
Re: Python?
Därför att jag vill att den inte ska sätta den till 1 varje gång jag kör metoden, utan hålla räkningen på hur många gånger (eller vilken gång, snarare) den kör(t)s.
(edit)
Jag vill, direkt efter funktionen körts, printa lite information, och då är det vitalt om det är 1a eller 2a gången den körs
(edit)
Jag vill, direkt efter funktionen körts, printa lite information, och då är det vitalt om det är 1a eller 2a gången den körs
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Det framgår ju inte av ditt exempel.Feilin skrev:Därför att jag vill att den inte ska sätta den till 1 varje gång jag kör metoden, utan hålla räkningen på hur många gånger (eller vilken gång, snarare) den kör(t)s.
(edit)
Jag vill, direkt efter funktionen körts, printa lite information, och då är det vitalt om det är 1a eller 2a gången den körs
Hur som helst så finns det flera alternativ. Enklast är att använda en global variabel som jag visade tidigare, men det är mycket bättre att skapa en liten klass istället. Globala variabler blir betydligt svårare att hålla ordning på när programmet växer sig större.
Re: Python?
Ursäkta min oklarhet i mina förklaringar. Vad jag vill är att kunna komma åt en variabel (eller nån motsvarande funktion) både innan, under och efter jag kör en metod. Just nu gör jag såhär (vilket blir fel):
Först vill jag definiera variablerna:
Sen vill jag definiera metoden:
Sist vill jag returnera värden:
Fast det måste vara fler fel, för bara det här returnerar:
Varför då?
Först vill jag definiera variablerna:
Kod: Markera allt
crn = {}
nmm = 1
Kod: Markera allt
def ant(sta):
while sta > 0:
crn[nmm] = random.randint(1,2)
nmm += 1
sta -= 1
Kod: Markera allt
print(crn[1])
print(crn[2])
Kod: Markera allt
File "<string>", line 10, in <module>
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Python?
Har du glömt att anropa funktionen?Feilin skrev:Just nu gör jag såhär (vilket blir fel):
Först vill jag definiera variablerna:Sen vill jag definiera metoden:Kod: Markera allt
crn = {} nmm = 1
Sist vill jag returnera värden:Kod: Markera allt
def ant(sta): while sta > 0: crn[nmm] = random.randint(1,2) nmm += 1 sta -= 1
Fast det måste vara fler fel, för bara det här returnerar:Kod: Markera allt
print(crn[1]) print(crn[2])
Varför då?Kod: Markera allt
File "<string>", line 10, in <module>
Jag har förstått det. Som jag redan visat så kan du använda en global variabel, men jag rekommenderar fortfarande att du använder en liten klass istället.Feilin skrev:Ursäkta min oklarhet i mina förklaringar. Vad jag vill är att kunna komma åt en variabel (eller nån motsvarande funktion) både innan, under och efter jag kör en metod.
Kod: Markera allt
import random
class DinKlass():
# dina variabler
crn = {}
nmm = 1
# dina metoder
def ant(self, sta):
while sta > 0:
self.crn[self.nmm] = random.randint(1,2)
self.nmm += 1
sta -= 1
objekt = DinKlass() # skapa ett obejkt av din klass
print(objekt.nmm)
objekt.ant(3) # anropa metoden
print(objekt.nmm)
Re: Python?
Nu har jag kommit runt problemet (på annat sätt, inte lyckats att skapa klasser och objekt), dock blev det mycket enklare och enkelspårigt. Jag får försöka fortsätta leka lite tills jag kommit på hur klasser och objekt fungerar.
Hursomhelst, tack för hjälpen! Kommer säkert komma tillbaka hit och bygga om koden som tipsat! Tusen tack!
En sak jag funderar på nu, var om man vill göra nånting med en grafisk layout. Har fått höra att vill man behandla text så är Python det smidigaste språket, men om man vill göra nåt mer grafiskt och interraktivt, som permanenta formulär (liknande excel eller access, är vad jag skulle vilja komma åt), så är Java enklare. Är det så? Är det möjligt att skapa formulär med knappar osv i Python?
Hursomhelst, tack för hjälpen! Kommer säkert komma tillbaka hit och bygga om koden som tipsat! Tusen tack!
En sak jag funderar på nu, var om man vill göra nånting med en grafisk layout. Har fått höra att vill man behandla text så är Python det smidigaste språket, men om man vill göra nåt mer grafiskt och interraktivt, som permanenta formulär (liknande excel eller access, är vad jag skulle vilja komma åt), så är Java enklare. Är det så? Är det möjligt att skapa formulär med knappar osv i Python?