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 ?
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)
Det blir inte värdet None om man inte tilldelar 'name' ett värde, utan felet kommer att vara att det saknar värde.
Det är sant, liten miss. Ena fallet ger en NameError, det andra en TypeError.
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).
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.
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
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".
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?
När vi skriver ut name har vi loopat färdigt.
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å?
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.
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"
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.
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.