• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af froksen | 27.01.2011 13:37

python: Give samme variabel forskellige værdier?

Programmering
Hej alle sammen

I forbindelse med at jeg hygger lidt med at lære lidt python er jeg stødt ind i et "problem". Hvis nu jeg ønsker at en variabel f.eks. y skal være "Ja" hvis noget er sandt eller "Nej" hvis noget er forkert, da har jeg forsøgt med:

(Dette er kun et kodeeksempel)

x = 1
if x == 1:
global y
y = "Hurra x var ligmed 1"
#print y
else:
global y
y = "Nej, x var ikke ligmed 1"
print y

I princippet virker scriptet fint, men naturligvis brokker "konsolen" sig ved at sige:
" SyntaxWarning: name 'y' is assigned to before global declaration" .

Dette har jeg tolket som at der er en variabel der har to værdier. Hvilket jeg naturligvis godt kan se logikken i, men hvordan opnår jeg så det ønskede resultat, uden advarsler osv?

Håber min forklaring er til at forstå, ellers spørger I bare så må man jo prøve igen :-)
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer8

# 1

14 år 5 måneder siden

Permalink

Indsendt af Marcus den 27. januar 2011 kl. 14:18

Permalink

Personligt ser jeg ingen

Personligt ser jeg ingen grund til at bruge global. Det burde virke fint hvis du bare skriver:
x = 1
if x == 1:
y = "Hurra x var ligmed 1"
#print y
else:
y = "Nej, x var ikke ligmed 1"
print y


Hvad er den specifikke grund til at du vil have den global?
  • Log ind eller opret dig for at tilføje kommentarer

# 2

14 år 5 måneder siden

Permalink

Indsendt af froksen den 27. januar 2011 kl. 14:43

Permalink

@Marcus
Sandt sandt, det var

@Marcus

Sandt sandt, det var selvf. lige en fejl at jeg glemte at sige at problemet ligger i at jeg har lavet mit script som objekter.
Så f.eks.


x = 1

def er_x_ligmed_en():
if x == 1:
global y
y = "Hurra x var ligmed 1"
#print y
else:
global y
y = "Nej, x var ikke ligmed 1"
konklusion()
return

def konklusion():
print y
return


er_x_ligmed_en()


... hvilket betyder at y skal gøres global før den kan bruges i "konklusion" definationen.. :-)
  • Log ind eller opret dig for at tilføje kommentarer

# 3

14 år 5 måneder siden

Permalink

Indsendt af kingu den 27. januar 2011 kl. 14:47

Permalink

Nu er jeg bestemt ikke

Nu er jeg bestemt ikke Python haj, men hvad forhindre dig i at smide y med som parameter i kaldet af konklusion()?
  • Log ind eller opret dig for at tilføje kommentarer

# 4

14 år 5 måneder siden

Permalink

Indsendt af froksen den 27. januar 2011 kl. 15:23

Permalink

#3, det at hvis jeg ikke

#3, det at hvis jeg ikke gør den global vil "y" kun være defineret så længe der arbejdes lokalt indenfor "er_x_ligmed_en" objektet og kan ikke bruges videre frem :-)

Det er hvertfald det jeg har erfaret :-)
  • Log ind eller opret dig for at tilføje kommentarer

# 5

14 år 5 måneder siden

Permalink

Indsendt af Marcus den 27. januar 2011 kl. 15:31

Permalink

Du kunne sætte y = "" lige

Du kunne sætte y = "" lige under x = 1.
Det tror jeg ville løse det ret nemt. Jeg kan se et problem i det hvis du senere bruger y igen, men du ville få samme problem hvis du brugte global.
  • Log ind eller opret dig for at tilføje kommentarer

# 6

14 år 5 måneder siden

Permalink

Indsendt af Kristho den 27. januar 2011 kl. 16:36

Permalink

froksen, du omtaler

froksen, du omtaler funktioner som objekter - "def" definerer en funktion, ikke et objekt :)
  • Log ind eller opret dig for at tilføje kommentarer

# 7

14 år 5 måneder siden

Permalink

Indsendt af ninja den 28. januar 2011 kl. 08:41

Permalink

Det rigtige vil vel være:
x

Det rigtige vil vel være:
x = 1

def er_x_ligmed_en():
global y
if x == 1:
y = "Hurra x var ligmed 1"
#print y
else:
y = "Nej, x var ikke ligmed 1"
konklusion()
return

def konklusion():
global y
print(y)
return


er_x_ligmed_en()


Tror Python bliver lidt forvirret når du ellers definerer y som global to gange, selvom du aldrig når ind til begge dele kode. Og så bør du vænne dig til at bruge print som en funktion, altså print('a') i stedet for print 'a', da det sidste er uddateret og ikke længere eksisterer i Python 3.x.
  • Log ind eller opret dig for at tilføje kommentarer

# 8

14 år 5 måneder siden

Permalink

Indsendt af froksen den 28. januar 2011 kl. 12:49

Permalink

@ninja.. Hehe, nu spiller

@ninja.. Hehe, nu spiller det helt uden fejl :-D Sjovt at jeg egentligt ikke selv havde tænkt på den mulighed, men sådan er det jo gerne :-)

Desuden tak for tippet vedr. print funktionen, det vil jeg da huske fremover :-D
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Gode anmeldelser Zorin OS 17.3 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

"Intet realistisk alternativ" - mig i r*ven 13
Nulstilling af adgangskode 2
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9
Open Source-eksperimentet 1
Microsoft og Google ud af de danske skoler 2

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !