14 svar
141 visningar
destiny99 är nöjd med hjälpen
destiny99 7014
Postad: 12 aug 2023 13:28 Redigerad: 12 aug 2023 13:41

While loop

Hej!

Jag förstår ej varför vi måste sätta name som vi definierar lika med tom sträng för att koden ska köras? Å andra sidan funkar det om jag tilldelar variabeln till "Mahiya". Jag provade att sätta lika med tex ett nummer också och då kommer ett felmeddelande istället. Jag fattar att man behöver definiera variabeln namn enligt exempelkoden nedan, men varför fungerar ej med nummer ?

Fermatrix 7841 – Fd. Medlem
Postad: 12 aug 2023 14:30 Redigerad: 12 aug 2023 14:32

Eftersom du försöker använda längden av en sträng, så måste den har ett värde, annars kommer du försöka kalla len(None) vilket kommer krasha. 

En alternativ lösning om du inte vill skapa name innan din loop:

while True:
    name = input("input goes here ")
    if name:
        break

print(name)

En annan lösning på samma spår som ditt kan vara:

name = ''
while not name:
    name = input("Input goes here: ")

print(name)
Laguna Online 28611
Postad: 12 aug 2023 14:39

Det blir inte värdet None om man inte tilldelar 'name' ett värde, utan felet kommer att vara att det saknar värde.

Fermatrix 7841 – Fd. Medlem
Postad: 12 aug 2023 14:42

Det är sant, liten miss. Ena fallet ger en NameError, det andra en TypeError.

Fermatrix 7841 – Fd. Medlem
Postad: 12 aug 2023 14:48 Redigerad: 12 aug 2023 14:49

Destiny99 skrev:

Jag provade att sätta lika med tex ett nummer också och då kommer ett felmeddelande istället.

Jag missade denna biten. len är inte definierad för en integer. Du kan inte kalla len(int).

 

Enligt dokumentationen för len():

Return the length (the number of items) of an object. The argument may be a sequence (such as a string, bytes, tuple, list, or range) or a collection (such as a dictionary, set, or frozen set).

 

destiny99 7014
Postad: 12 aug 2023 15:25
Dracaena skrev:

Destiny99 skrev:

Jag provade att sätta lika med tex ett nummer också och då kommer ett felmeddelande istället.

Jag missade denna biten. len är inte definierad för en integer. Du kan inte kalla len(int).

 

Enligt dokumentationen för len():

Return the length (the number of items) of an object. The argument may be a sequence (such as a string, bytes, tuple, list, or range) or a collection (such as a dictionary, set, or frozen set).

 

Okej då vet jag. 

destiny99 7014
Postad: 12 aug 2023 15:26 Redigerad: 12 aug 2023 15:32
Dracaena skrev:

Eftersom du försöker använda längden av en sträng, så måste den har ett värde, annars kommer du försöka kalla len(None) vilket kommer krasha. 

En alternativ lösning om du inte vill skapa name innan din loop:

while True:
    name = input("input goes here ")
    if name:
        break

print(name)

En annan lösning på samma spår som ditt kan vara:

name = ''
while not name:
    name = input("Input goes here: ")

print(name)

Din andra lösning på samma spår såg jag någon jag kollar på youtube göra det. Jag förstod ej varför han skrev name= ' '  och sen införde han logical operator not vid while. Menar han att om vi ej definierar vad name är så printar vi ut enter your name ? Jag testade att byta ut name= ' ' mot name= "Mahiya". Då fick jag Mahiya som utskrift

Laguna Online 28611
Postad: 12 aug 2023 17:09

Sanningsvärden i Python är True och False, men alla värden kan användas som sanningsvärden. De flesta värden tolkas som True, men några tolkas som False, t.ex. talet 0 och den tomma strängen.

Eftersom vi rör oss med strängar här så vill vi loopa tills användaren har matat in en sträng som inte är tom. 'not' på en tom sträng ger sanningsvärdet True så då fortsätter vi (eller börjar) loopa.

Man kan läsa det som "så länge som name inte är tom".

destiny99 7014
Postad: 12 aug 2023 21:23
Laguna skrev:

Sanningsvärden i Python är True och False, men alla värden kan användas som sanningsvärden. De flesta värden tolkas som True, men några tolkas som False, t.ex. talet 0 och den tomma strängen.

Eftersom vi rör oss med strängar här så vill vi loopa tills användaren har matat in en sträng som inte är tom. 'not' på en tom sträng ger sanningsvärdet True så då fortsätter vi (eller börjar) loopa.

Man kan läsa det som "så länge som name inte är tom".

Så om name har ett värde så loopar vi och skriver ut värdet då eftersom det är falsk? Och om name ej har ett värde dvs tom sträng så är det true med not operatorn? 

Laguna Online 28611
Postad: 13 aug 2023 10:48

När vi skriver ut name har vi loopat färdigt.

destiny99 7014
Postad: 13 aug 2023 11:26 Redigerad: 13 aug 2023 11:28
Laguna skrev:

När vi skriver ut name har vi loopat färdigt.

Okej men jag är förvirrad över att det står not vid while för jag hänger ej med på hur vi har loopat färdigt. När jag skriver ingenting tex tom sträng under variabeln name, så blir jag som användare frågad om att enter your name. Varför blir det så?

Laguna Online 28611
Postad: 13 aug 2023 11:35

Vi har loopat färdigt när "not name" är falskt. Det är falskt när "name" är sant, alltså när name är en sträng som inte är tom.

destiny99 7014
Postad: 13 aug 2023 14:50 Redigerad: 13 aug 2023 14:52
Laguna skrev:

Vi har loopat färdigt när "not name" är falskt. Det är falskt när "name" är sant, alltså när name är en sträng som inte är tom.

Ah okej. Då är jag med så när name="Mahiya" så säger den printa ut mahiya och om name är tom så frågar den oss "enter your name"

Laguna Online 28611
Postad: 13 aug 2023 15:53

Poängen med while-loopen är att vi inte vill få en tom sträng som värde på 'name'. Annars skulle det räcka med bara raden som gör "input".

Prova att bara trycka Enter första gången.

destiny99 7014
Postad: 13 aug 2023 16:01 Redigerad: 13 aug 2023 16:02
Laguna skrev:

Poängen med while-loopen är att vi inte vill få en tom sträng som värde på 'name'. Annars skulle det räcka med bara raden som gör "input".

Prova att bara trycka Enter första gången.

aa då dyker input upp som säger "enter your name" sen enter igen får jag samma sak. 

Svara Avbryt
Close