Vinnaren i pepparkakshustävlingen!
2016-04-11, 12:08
  #1
Medlem
Behöver hjälp.
Är totalt nybörjare och försöker lära mig, har ingen förkunskap om programmering och försöker lära mig utfrån vad jag hittar på nätet.

Har gjort en fortsättning på helloworld som jag inte får att fungera.
Antagligen för att jag inte vet hur man ska loopa en fråga. I detta fallet ett password.
Misstänker även att min ide är knas, då jag i blocket inte kan lägga else, kommandon eller vilket kommando som helst så att blocket blir läsbart. Det fungerar bara om jag lägger ut det i vänsterkanten.
Men då jag är toknybörjare och inte har någon att fråga blir det svårt att få svar.

I min lilla kod, så är det tänkt att vid fel svar på ifsatsen, så ska felsvaret komma upp och sedan börjar det om med frågan igen, tills man skrivit in rätt svar. Ett password helt enkelt.
Överkurs är att få programmet att göra detta tre gånger för att sedan avslutas om det svaras fel.
Och rätt svar får programmet att fortsätta.

Jag har kört fast, och önskar hjälp.
Gärna med förklaringar, så att en smått utvecklingsstörd förstår.

Med vänlig hälsning

Här kommer koden.

Kod:
print ("Vad heter dina katter?.")
katter input()
if 
katter:
    print(
"Välkommen!")
    print (
"Vad heter du?"#ask for their name
heter input()
print (
"Trevligt att träffas!, " heter)
print (
"så många bokstäver innehåller ditt namn:")
print (
len(heter))
print (
"Hur gammal är du?"#ask for their age
gammal input()
print(
"Då är du " str(int(gammal) +1) + " om ett år.")
bäst input()
print(
"vem är bäst?")
print(
"Du har rätt, jag är bäst")
##if(str(name) != ("Viktor")):
name input ("Skriv valfritt namn:"# Någonstans här bör det bli en loop
if(str(name) == ("Viktor")):
    print(
"Tur för dig!")
else:
        print(
"Prova igen!")
    
print(
"Slut"
Citera
2016-04-11, 13:38
  #2
Medlem
Du kan använda en whileloop, har aldrig skrivit i Python så kan inte exakt syntax, men bör vara något i stil med
Kod:
while(name != "victor")
görSaker();
Citera
2016-04-11, 15:00
  #3
Medlem
Tack för svar.
Har redan testat detta innan och hamnade då i en oändlig loop.
Fast det var kanske inte konstigt då jag tror jag hade print ("prova igen") i while satsen.
Jag testade en massa kombinationer i görasaker fnurran,inkl str(name)
Men då klagade den direkt på else command.

Om vi börjar från basic, var stoppar jag in whilesatsen? När den låg sist fick jag oändlig loop.
Raden under name=input ("skriv valfritt namn"): får jag bara felmeddelande på print funktion?
Citera
2016-04-11, 15:22
  #4
Medlem
GalenHackares avatar
Bryt ut nedre delen av koden i en separat funktion.

Kod:
name input ("Skriv valfritt namn:"# Någonstans här bör det bli en loop
question(name)

def question(name="nobody"):
      if 
name=="nobody":
          
name input ("Skriv valfritt namn:")
      if(
str(name) == ("Viktor")):
        print(
"Tur för dig!")
        print(
"Slut")
      else:
        print(
"Prova igen!")
        
question() 

Nånting sånt. Tänk på indententeringen. Istället för "input" kan du använda raw_input, den ta hänsyn till \n.
__________________
Senast redigerad av GalenHackare 2016-04-11 kl. 16:11.
Citera
2016-04-11, 23:28
  #5
Medlem
Hej igen och tack för att ni försöker hjälpa mig.

Får det inte till att fungera.
Kod:
question(name
Vill inte vara med, utan just det går programmet vidare.
men då blir inte funktionen som jag vill.
Den fortsätter efter else kommandot.
Jag vill att den loopar om till att fråga efter namnet igen.

Kod:
name input("skriv valfritt namn:")# Någonstans här bör det bli en loop
question(name)

def question(name="nobody"):
    if 
name == "nobody":
        
name input("skriv valfritt namn:")
        if(
str(name) == ("Viktor")):
                print(
"Tur för dig!")
        else:
            print(
"Prova igen!")
question() 

Först får jag frågan efter namn två gånger på raken.
Sedan knatar den helt sonika vidare ner i programmet som vilken if sats som helst.

Jag kanske är otydlig, men jag är oerhört tacksam för den hjälpen jag får.

mvh
Citera
2016-04-12, 00:16
  #6
Medlem
GalenHackares avatar
Funktionen måste defineras före den anropas. Du måste alltså flytta upp den till att ligga först. Sedan måste indenteringen (indragningen) av koden vara rätt. "question()" måste ligga exakt under "print "Prova igen!" som visas nedan. Annars får du aldrig till loopen. Jag har testat på Python 2.7 och där fungerar det. Jag antar att du sitter på nån 3.1 version. Prova att bara testa koden nedan och se att den fungerar.

Kod:
def question(name="nobody"):
      if 
name=="nobody":
          
name raw_input ("Skriv valfritt namn:")
      if 
str(name) == "Viktor":
          print 
"Tur för dig!"
          
print "Slut"
      
else:
          print 
"Prova igen!"
          
question()  

name raw_input("Skriv valfritt namn:"
question(name
Citera
2016-04-12, 00:19
  #7
Medlem
GalenHackares avatar
Ok. Använd inte raw_input. Fungerar ej på Python 3.0 och senare. Använd bara input.
Citera
2016-04-12, 00:44
  #8
Medlem
GalenHackares avatar
Det går att skriva med en while loop också. Så här:

Kod:
name ""

while name !="Viktor":
      if 
name!="Viktor":
          
name input ("Skriv valfritt namn:")
      if 
str(name) == "Viktor":
          print 
"Tur för dig!"
          
print "Slut"
      
else:
          print 
"Prova igen!" 
Jag tror att den här lösningen med while loopen är den bästa.
__________________
Senast redigerad av GalenHackare 2016-04-12 kl. 00:58.
Citera
2016-04-12, 07:20
  #9
Medlem
MasterShakes avatar
Eller så kan man göra så här om det max ska frågas 3 gånger:
Kod:
c = 0
while c < 3:
	name = input('Vem är bäst?: ')
	if name != 'MasterShake':
		print('Prova igen.')
		c += 1
	else:
		print('Tur för dig.')
		break
print('Slut.')
Om det ska köras evighetsloop så är det bättre om man skriver while True och sedan gör break vid korrekt värde eftersom man då slipper att initiera variabel utanför loopen, det är pythons version av do while.
Citera
2017-04-08, 14:45
  #10
Medlem
Du har nog sedan länge löst problemet men det enklaste sättet är väl att skriva:


Kod:
while True:
     name = input("Skriv namn: ")
     
     name = name.lower()
     
     if name == "viktor":
              break

lower gör så att texten blir gemener, dvs du kan skriva "VIKTOR" eller "Viktor" eller "ViKToR" och ändå kunna bryta loopen.
__________________
Senast redigerad av Townzend 2017-04-08 kl. 14:57.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback