• 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 9 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 9 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 9 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 9 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 9 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 9 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 9 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 9 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

Østrigsk ministerium smider Microsoft ud til fordel for Nextcloud 0
Internettet er ved at dø. Vi kan stadig stoppe det 0
Tid til at lære noget igen 0
TPM 2 0
BigLinux 0

Seneste aktivitet

Brug carburetor til at forblive usynlig online 8
Sådan konfigurerer du flatpaks' flathub til verified only 9
Plasma tapet-skifter 3
How to upgrade to LMDE 7 4
Virksomheder og enheder der kører på Linux 11
NordVPN har udgivet kildekoden til sin grafiske brugergrænseflade 2
Flere og flere bruger Brave browseren 1
LibreOffice og Collabora: Hvorfor er de ikke i skolerne i stedet for Word og Google Docs? 11
Firewall igen 5
Værdien ved open source 2
Sailfish på android telefon 1
Ladybird Browser 7
Satiriske ordspil 3
Kan ikke boote på installation 26
Tilføj signatur til Evolution mail 2
LUKS kryptering - Er der andre der bruger det 15
Dansk distro til software udviklere 2
Linux Debian 5
Brother printer installation 2
Den er go 6

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !