问:
for and while loop combined
I'm trying to add a while for my question list of constructs. I want python to only allow answers like "helemaal mee oneens, mee oneens, etc).
I understand how I make this with simple code. But I don't know how I can make all those questions only accept input from the answers I want.
There is raw input, so people have to be able to type their answer. I tried this:

```<code>for Vragenlijst_vriendelijkheid in (list(range(0,8))):
 while Vragenlijst_vriendelijkheid (list(range(0,8))) != "Helemaal niet mee eens" and != "Niet mee eens" and != "Neutraal" and != "Mee eens" and != "Helemaal mee eens":
   print ("Let op: deze vragen zijn hoofdletter gevoelig, elk antwoord dient precies overgenomen te worden.")
</code>```

That didn't work out quite well.. It just printed a lot of "het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden." Can anybody help me?
I'm not good at programming, i have to do this for a school assignment and i really don't get it..

```<code>while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
  print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
  Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
  if Welk_construct == ("vriendelijkheid"):
     Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
     Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
     Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
     Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
     Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
     Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
     Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
     Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
  elif Welk_construct == ("consciëntieusheid"):
     Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
     Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
     Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
     Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
     Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
     Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
     Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
     Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
  elif Welk_construct == ("autonomie"):
     Antwoord_A1 = input (Vragenlijst_autonomie [0])
     Antwoord_A2 = input (Vragenlijst_autonomie [1])
     Antwoord_A3 = input (Vragenlijst_autonomie [2])
     Antwoord_A4 = input (Vragenlijst_autonomie [3])
     Antwoord_A5 = input (Vragenlijst_autonomie [4])
     Antwoord_A6 = input (Vragenlijst_autonomie [5])
     Antwoord_A7 = input (Vragenlijst_autonomie [6])
     Antwoord_A8 = input (Vragenlijst_autonomie [7])
  elif Welk_construct == ("extraversie"):
     Antwoord_E1 = input (Vragenlijst_extraversie [0])
     Antwoord_E2 = input (Vragenlijst_extraversie [1])
     Antwoord_E3 = input (Vragenlijst_extraversie [2])
     Antwoord_E4 = input (Vragenlijst_extraversie [3])
     Antwoord_E5 = input (Vragenlijst_extraversie [4])
     Antwoord_E6 = input (Vragenlijst_extraversie [5])
     Antwoord_E7 = input (Vragenlijst_extraversie [6])
     Antwoord_E8 = input (Vragenlijst_extraversie [7])
  elif Welk_construct == ("emotionele stabiliteit"):
     Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
     Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
     Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
     Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
     Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
     Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
     Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
     Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])
</code>```

this is the whole file:

```<code># antwoorden demografische vragen
Naam = ("onbekend")
Geslacht = ("onbekend")
Leeftijd = ("onbekend")

# overige vragen
Welk_construct = ("onbekend")
Nog_een = ("onbekend")

# antwoorden Vragenlijst_vriendelijkheid
Antwoord_V1 = ("onbekend")
Antwoord_V2 = ("onbekend")
Antwoord_V3 = ("onbekend")
Antwoord_V4 = ("onbekend")
Antwoord_V5 = ("onbekend")
Antwoord_V6 = ("onbekend")
Antwoord_V7 = ("onbekend")
Antwoord_V8 = ("onbekend")

# antwoorden Vragenlijst_consiëntieusheid
Antwoord_C1 = ("onbekend")
Antwoord_C2 = ("onbekend")
Antwoord_C3 = ("onbekend")
Antwoord_C4 = ("onbekend")
Antwoord_C5 = ("onbekend")
Antwoord_C6 = ("onbekend")
Antwoord_C7 = ("onbekend")
Antwoord_C8 = ("onbekend")

# antwoorden Vragenlijst_autonomie
Antwoord_A1 = ("onbekend")
Antwoord_A2 = ("onbekend")
Antwoord_A3 = ("onbekend")
Antwoord_A4 = ("onbekend")
Antwoord_A5 = ("onbekend")
Antwoord_A6 = ("onbekend")
Antwoord_A7 = ("onbekend")
Antwoord_A8 = ("onbekend")

# antwoorden Vragenlijst_extraversie
Antwoord_E1 = ("onbekend")
Antwoord_E2 = ("onbekend")
Antwoord_E3 = ("onbekend")
Antwoord_E4 = ("onbekend")
Antwoord_E5 = ("onbekend")
Antwoord_E6 = ("onbekend")
Antwoord_E7 = ("onbekend")
Antwoord_E8 = ("onbekend")

# antwoorden Vragenijst_emotionele_stabiliteit
Antwoord_ES1 = ("onbekend")
Antwoord_ES2 = ("onbekend")
Antwoord_ES3 = ("onbekend")
Antwoord_ES4 = ("onbekend")
Antwoord_ES5 = ("onbekend")
Antwoord_ES6 = ("onbekend")
Antwoord_ES7 = ("onbekend")
Antwoord_ES8 = ("onbekend")

# vragenlijsten

Demografische_vragen = (["Wat is uw naam? Typ hier uw naam.", "Wat is uw geslacht? Typ hier Man, Vrouw of Anders.", "Wat is uw leeftijd? Typ hier uw leeftijd in jaren."])

Vragenlijst_vriendelijkheid = (["Vraag V1: Ik heb vertrouwen in anderen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", " Vraag V2: Ik gebruik en manipuleer anderen om mijn zin te krijgen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V3: Ik help anderen graag. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraaga V4: Ik hou van strijd en een stevige discussie. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V5: Ik vind mezelf beter dan anderen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V6: Ik heb medelijden met daklozen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V7: Ik denk dat mensen in principe goede bedoelingen hebben. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V8: Ik vind het niet erg om te bedriegen om hogerop te komen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_consciëntieusheid = (["Vraag C1: Ik breng taken tot een goed einde. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C2: Ik hou niet van wandorde en ruim graag op. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C3: Ik hou mijn beloftes. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C4: Ik ben een harde werker. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C5: Ik ben altijd voorbereid. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C6: Ik ben erg spontaan en reageer zonder na te denken. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C7: Ik doe de dingen die k doe altijd goed. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C8: Ik vergeet vaak dingen op de juiste plaats terug te leggen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_autonomie = (["Vraag A1: Ik heb een levendige fantasie. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A2: Ik vind kunst belangrijk. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A3: Ik ervaar sterke en gevarieerde emoties. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A4: Ik verkies afwisseling oven routine. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A5: Ik lees graag uitdagende boeken en artikelen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A6: Ik verkies politiek die voor verandering is en progressief. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A7: Ik laat mijn verbeelding graag de vrije loop. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A8: Ik zie de schoonheid van dingen die anderen niet opvallen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_extraversie = (["Vraag E1: Ik maak gemakkelijk vrienden. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E2: Ik hou van grote feesten en bijeenkomsten. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E3: Ik neem graag de leiding in situaties en bij gebeurtenissen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E4: Ik heb moeite om anderen te benaderen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E5: Ik hou van opwinding en spanning. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E6: Ik ben een heel vrolijk persoon. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E7: Ik voel me op mijn gemak bij andere mensen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E8: Ik praat met veel verschillende mensen op feestjes. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_emotionele_stabiliteit = (["Vraag ES1: Ik maak me veel zorgen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES2: Ik word snel boos. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES3: Ik voel me vaak verdrietig. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES4: Ik laat me regelmatig gaan wat betreft genieten. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES5: Ik ben snel in paniek. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES6: Ik vrees vaak het ergste.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES7: Ik ben altijd bezig en druk met dingen.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES8: Ik raak snel geïrriteerd.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens." ])

# demografische vragen
print ("Hallo! Voordat we met de vragenlijst gaan beginnen, komen er een paar vragen over u. Zo kunnen we uw gegevens het best verwerken.")
Naam = input (Demografische_vragen [0])

while Geslacht != "Man" and Geslacht != "man" and Geslacht != "Vrouw"  and Geslacht != "vrouw"and Geslacht != "Anders" and Geslacht != "anders":
  Geslacht = input (Demografische_vragen [1])

invalide = True
while invalide:
  Leeftijd = int (input (Demografische_vragen [2]))
  if Leeftijd >=16 and Leeftijd <=99:
    invalide= False
  else:
    print ("Sorry" ,(Naam),", je moet tussen de 16 en 99 zijn")

# intro vragenlijst
print ("Welkom" ,(Naam),", je gaat nu een vragenlijst invullen voor één van de Big Five persoonijkheidstrekken.")
print ("Elk onderdeel heeft 8 vragen. Deze zullen ongeveer 2 minuten duren.")
print ("Je kunt kiezen uit: vriendelijkheid, emotionele stabiliteit, extraversie, consciëntieusheid en autonomie")

# Welk construct wil je meten
while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
  print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
  Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
  if Welk_construct == ("vriendelijkheid"):
     Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
     Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
     Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
     Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
     Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
     Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
     Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
     Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
  elif Welk_construct == ("consciëntieusheid"):
     Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
     Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
     Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
     Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
     Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
     Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
     Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
     Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
  elif Welk_construct == ("autonomie"):
     Antwoord_A1 = input (Vragenlijst_autonomie [0])
     Antwoord_A2 = input (Vragenlijst_autonomie [1])
     Antwoord_A3 = input (Vragenlijst_autonomie [2])
     Antwoord_A4 = input (Vragenlijst_autonomie [3])
     Antwoord_A5 = input (Vragenlijst_autonomie [4])
     Antwoord_A6 = input (Vragenlijst_autonomie [5])
     Antwoord_A7 = input (Vragenlijst_autonomie [6])
     Antwoord_A8 = input (Vragenlijst_autonomie [7])
  elif Welk_construct == ("extraversie"):
     Antwoord_E1 = input (Vragenlijst_extraversie [0])
     Antwoord_E2 = input (Vragenlijst_extraversie [1])
     Antwoord_E3 = input (Vragenlijst_extraversie [2])
     Antwoord_E4 = input (Vragenlijst_extraversie [3])
     Antwoord_E5 = input (Vragenlijst_extraversie [4])
     Antwoord_E6 = input (Vragenlijst_extraversie [5])
     Antwoord_E7 = input (Vragenlijst_extraversie [6])
     Antwoord_E8 = input (Vragenlijst_extraversie [7])
  elif Welk_construct == ("emotionele stabiliteit"):
     Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
     Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
     Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
     Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
     Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
     Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
     Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
     Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])

# wil je nog een construct meten?
while Nog_een != "ja" and Nog_een != "nee":
 print ("Let op: het antwoord moet expliciet ja of nee zijn en het programma is hoofdlettergevoelig.")
 Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")

# Nee
 if Nog_een == "nee":
  print ("Bedankt voor je deelname!")

 # ja
 if Nog_een == "ja":
     Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
     while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
      print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
      Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
     if Welk_construct == ("vriendelijkheid"):
        Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
        Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
        Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
        Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
        Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
        Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
        Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
        Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("consciëntieusheid"):
        Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
        Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
        Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
        Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
        Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
        Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
        Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
        Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("autonomie"):
        Antwoord_A1 = input (Vragenlijst_autonomie [0])
        Antwoord_A2 = input (Vragenlijst_autonomie [1])
        Antwoord_A3 = input (Vragenlijst_autonomie [2])
        Antwoord_A4 = input (Vragenlijst_autonomie [3])
        Antwoord_A5 = input (Vragenlijst_autonomie [4])
        Antwoord_A6 = input (Vragenlijst_autonomie [5])
        Antwoord_A7 = input (Vragenlijst_autonomie [6])
        Antwoord_A8 = input (Vragenlijst_autonomie [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("extraversie"):
        Antwoord_E1 = input (Vragenlijst_extraversie [0])
        Antwoord_E2 = input (Vragenlijst_extraversie [1])
        Antwoord_E3 = input (Vragenlijst_extraversie [2])
        Antwoord_E4 = input (Vragenlijst_extraversie [3])
        Antwoord_E5 = input (Vragenlijst_extraversie [4])
        Antwoord_E6 = input (Vragenlijst_extraversie [5])
        Antwoord_E7 = input (Vragenlijst_extraversie [6])
        Antwoord_E8 = input (Vragenlijst_extraversie [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("emotionele stabiliteit"):
        Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
        Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
        Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
        Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
        Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
        Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
        Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
        Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")

# opslaan antwoorden
antwoorden_demografische_vragen = [Naam, Leeftijd, Geslacht]
antwoorden_vriendelijkheid = [Antwoord_V1, Antwoord_V2, Antwoord_V3, Antwoord_V4, Antwoord_V5, Antwoord_V6, Antwoord_V7, Antwoord_V8]
antwoorden_consciëntieusheid = [Antwoord_C1, Antwoord_C2, Antwoord_C3, Antwoord_C4, Antwoord_C5, Antwoord_C6, Antwoord_C7, Antwoord_C8]
antwoorden_autonomie = [Antwoord_A1, Antwoord_A2, Antwoord_A3, Antwoord_A4, Antwoord_A5, Antwoord_A6, Antwoord_A7, Antwoord_A8]
antwoorden_extraversie = [Antwoord_E1, Antwoord_E2, Antwoord_E3, Antwoord_E4, Antwoord_E5, Antwoord_E6, Antwoord_E7, Antwoord_E8]
antwoorden_emotionele_stabiliteit = [Antwoord_ES1, Antwoord_ES2, Antwoord_ES3, Antwoord_ES4, Antwoord_ES5, Antwoord_ES6, Antwoord_ES7, Antwoord_ES8, ]

data = open("antwoorden vragenijst", "a")
data.writelines(str(antwoorden_demografische_vragen) + "\n")
data.writelines(str(antwoorden_vriendelijkheid) + "\n")
data.writelines(str(antwoorden_consciëntieusheid) + "\n")
data.writelines(str(antwoorden_autonomie) + "\n")
data.writelines(str(antwoorden_extraversie) + "\n")
data.writelines(str(antwoorden_extraversie) + "\n")
data.writelines(str(antwoorden_emotionele_stabiliteit) + "\n")
data.close()
</code>```

答:
You can definitely clean this code up a bit, to make it a) shorter and b) cleaner.

For example, you have:

```<code># antwoorden Vragenijst_emotionele_stabiliteit
Antwoord_ES1 = ("onbekend")
Antwoord_ES2 = ("onbekend")
Antwoord_ES3 = ("onbekend")
Antwoord_ES4 = ("onbekend")
Antwoord_ES5 = ("onbekend")
Antwoord_ES6 = ("onbekend")
Antwoord_ES7 = ("onbekend")
Antwoord_ES8 = ("onbekend")
</code>```

This could be cleaned up by using a construct like this.  Note that python uses '0' based arrays/lists:

```<code>Antwoord_ES=[]
for i in range(0,7):
    Antwoord_ES.append("onbekend")

print(len(Antwoord_ES))
</code>```

You can extend this idea to more dimensions.  See here for a reference: https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/

Title: for and while loop combined

Body:
I'm trying to add a while for my question list of constructs. I want python to only allow answers like "helemaal mee oneens, mee oneens, etc).
I understand how I make this with simple code. But I don't know how I can make all those questions only accept input from the answers I want.
There is raw input, so people have to be able to type their answer. I tried this:

for Vragenlijst_vriendelijkheid in (list(range(0,8))):
 while Vragenlijst_vriendelijkheid (list(range(0,8))) != "Helemaal niet mee eens" and != "Niet mee eens" and != "Neutraal" and != "Mee eens" and != "Helemaal mee eens":
   print ("Let op: deze vragen zijn hoofdletter gevoelig, elk antwoord dient precies overgenomen te worden.")

That didn't work out quite well.. It just printed a lot of "het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden." Can anybody help me?
I'm not good at programming, i have to do this for a school assignment and i really don't get it..

while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
  print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
  Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
  if Welk_construct == ("vriendelijkheid"):
     Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
     Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
     Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
     Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
     Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
     Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
     Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
     Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
  elif Welk_construct == ("consciëntieusheid"):
     Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
     Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
     Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
     Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
     Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
     Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
     Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
     Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
  elif Welk_construct == ("autonomie"):
     Antwoord_A1 = input (Vragenlijst_autonomie [0])
     Antwoord_A2 = input (Vragenlijst_autonomie [1])
     Antwoord_A3 = input (Vragenlijst_autonomie [2])
     Antwoord_A4 = input (Vragenlijst_autonomie [3])
     Antwoord_A5 = input (Vragenlijst_autonomie [4])
     Antwoord_A6 = input (Vragenlijst_autonomie [5])
     Antwoord_A7 = input (Vragenlijst_autonomie [6])
     Antwoord_A8 = input (Vragenlijst_autonomie [7])
  elif Welk_construct == ("extraversie"):
     Antwoord_E1 = input (Vragenlijst_extraversie [0])
     Antwoord_E2 = input (Vragenlijst_extraversie [1])
     Antwoord_E3 = input (Vragenlijst_extraversie [2])
     Antwoord_E4 = input (Vragenlijst_extraversie [3])
     Antwoord_E5 = input (Vragenlijst_extraversie [4])
     Antwoord_E6 = input (Vragenlijst_extraversie [5])
     Antwoord_E7 = input (Vragenlijst_extraversie [6])
     Antwoord_E8 = input (Vragenlijst_extraversie [7])
  elif Welk_construct == ("emotionele stabiliteit"):
     Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
     Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
     Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
     Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
     Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
     Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
     Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
     Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])

this is the whole file:

# antwoorden demografische vragen
Naam = ("onbekend")
Geslacht = ("onbekend")
Leeftijd = ("onbekend")

# overige vragen
Welk_construct = ("onbekend")
Nog_een = ("onbekend")

# antwoorden Vragenlijst_vriendelijkheid
Antwoord_V1 = ("onbekend")
Antwoord_V2 = ("onbekend")
Antwoord_V3 = ("onbekend")
Antwoord_V4 = ("onbekend")
Antwoord_V5 = ("onbekend")
Antwoord_V6 = ("onbekend")
Antwoord_V7 = ("onbekend")
Antwoord_V8 = ("onbekend")

# antwoorden Vragenlijst_consiëntieusheid
Antwoord_C1 = ("onbekend")
Antwoord_C2 = ("onbekend")
Antwoord_C3 = ("onbekend")
Antwoord_C4 = ("onbekend")
Antwoord_C5 = ("onbekend")
Antwoord_C6 = ("onbekend")
Antwoord_C7 = ("onbekend")
Antwoord_C8 = ("onbekend")

# antwoorden Vragenlijst_autonomie
Antwoord_A1 = ("onbekend")
Antwoord_A2 = ("onbekend")
Antwoord_A3 = ("onbekend")
Antwoord_A4 = ("onbekend")
Antwoord_A5 = ("onbekend")
Antwoord_A6 = ("onbekend")
Antwoord_A7 = ("onbekend")
Antwoord_A8 = ("onbekend")

# antwoorden Vragenlijst_extraversie
Antwoord_E1 = ("onbekend")
Antwoord_E2 = ("onbekend")
Antwoord_E3 = ("onbekend")
Antwoord_E4 = ("onbekend")
Antwoord_E5 = ("onbekend")
Antwoord_E6 = ("onbekend")
Antwoord_E7 = ("onbekend")
Antwoord_E8 = ("onbekend")

# antwoorden Vragenijst_emotionele_stabiliteit
Antwoord_ES1 = ("onbekend")
Antwoord_ES2 = ("onbekend")
Antwoord_ES3 = ("onbekend")
Antwoord_ES4 = ("onbekend")
Antwoord_ES5 = ("onbekend")
Antwoord_ES6 = ("onbekend")
Antwoord_ES7 = ("onbekend")
Antwoord_ES8 = ("onbekend")

# vragenlijsten

Demografische_vragen = (["Wat is uw naam? Typ hier uw naam.", "Wat is uw geslacht? Typ hier Man, Vrouw of Anders.", "Wat is uw leeftijd? Typ hier uw leeftijd in jaren."])

Vragenlijst_vriendelijkheid = (["Vraag V1: Ik heb vertrouwen in anderen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", " Vraag V2: Ik gebruik en manipuleer anderen om mijn zin te krijgen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V3: Ik help anderen graag. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraaga V4: Ik hou van strijd en een stevige discussie. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V5: Ik vind mezelf beter dan anderen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V6: Ik heb medelijden met daklozen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V7: Ik denk dat mensen in principe goede bedoelingen hebben. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag V8: Ik vind het niet erg om te bedriegen om hogerop te komen. Typ hier: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_consciëntieusheid = (["Vraag C1: Ik breng taken tot een goed einde. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C2: Ik hou niet van wandorde en ruim graag op. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C3: Ik hou mijn beloftes. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C4: Ik ben een harde werker. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C5: Ik ben altijd voorbereid. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C6: Ik ben erg spontaan en reageer zonder na te denken. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C7: Ik doe de dingen die k doe altijd goed. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag C8: Ik vergeet vaak dingen op de juiste plaats terug te leggen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_autonomie = (["Vraag A1: Ik heb een levendige fantasie. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A2: Ik vind kunst belangrijk. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A3: Ik ervaar sterke en gevarieerde emoties. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A4: Ik verkies afwisseling oven routine. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A5: Ik lees graag uitdagende boeken en artikelen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A6: Ik verkies politiek die voor verandering is en progressief. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A7: Ik laat mijn verbeelding graag de vrije loop. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag A8: Ik zie de schoonheid van dingen die anderen niet opvallen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_extraversie = (["Vraag E1: Ik maak gemakkelijk vrienden. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E2: Ik hou van grote feesten en bijeenkomsten. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E3: Ik neem graag de leiding in situaties en bij gebeurtenissen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E4: Ik heb moeite om anderen te benaderen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E5: Ik hou van opwinding en spanning. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E6: Ik ben een heel vrolijk persoon. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E7: Ik voel me op mijn gemak bij andere mensen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag E8: Ik praat met veel verschillende mensen op feestjes. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens."])

Vragenlijst_emotionele_stabiliteit = (["Vraag ES1: Ik maak me veel zorgen. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES2: Ik word snel boos. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES3: Ik voel me vaak verdrietig. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES4: Ik laat me regelmatig gaan wat betreft genieten. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES5: Ik ben snel in paniek. Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES6: Ik vrees vaak het ergste.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES7: Ik ben altijd bezig en druk met dingen.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens.", "Vraag ES8: Ik raak snel geïrriteerd.  Typ hieronder: Helemaal niet mee eens, Niet mee eens, Neutraal, Mee eens, Helemaal mee eens." ])

# demografische vragen
print ("Hallo! Voordat we met de vragenlijst gaan beginnen, komen er een paar vragen over u. Zo kunnen we uw gegevens het best verwerken.")
Naam = input (Demografische_vragen [0])

while Geslacht != "Man" and Geslacht != "man" and Geslacht != "Vrouw"  and Geslacht != "vrouw"and Geslacht != "Anders" and Geslacht != "anders":
  Geslacht = input (Demografische_vragen [1])

invalide = True
while invalide:
  Leeftijd = int (input (Demografische_vragen [2]))
  if Leeftijd >=16 and Leeftijd <=99:
    invalide= False
  else:
    print ("Sorry" ,(Naam),", je moet tussen de 16 en 99 zijn")

# intro vragenlijst
print ("Welkom" ,(Naam),", je gaat nu een vragenlijst invullen voor één van de Big Five persoonijkheidstrekken.")
print ("Elk onderdeel heeft 8 vragen. Deze zullen ongeveer 2 minuten duren.")
print ("Je kunt kiezen uit: vriendelijkheid, emotionele stabiliteit, extraversie, consciëntieusheid en autonomie")

# Welk construct wil je meten
while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
  print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
  Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
  if Welk_construct == ("vriendelijkheid"):
     Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
     Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
     Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
     Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
     Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
     Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
     Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
     Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
  elif Welk_construct == ("consciëntieusheid"):
     Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
     Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
     Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
     Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
     Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
     Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
     Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
     Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
  elif Welk_construct == ("autonomie"):
     Antwoord_A1 = input (Vragenlijst_autonomie [0])
     Antwoord_A2 = input (Vragenlijst_autonomie [1])
     Antwoord_A3 = input (Vragenlijst_autonomie [2])
     Antwoord_A4 = input (Vragenlijst_autonomie [3])
     Antwoord_A5 = input (Vragenlijst_autonomie [4])
     Antwoord_A6 = input (Vragenlijst_autonomie [5])
     Antwoord_A7 = input (Vragenlijst_autonomie [6])
     Antwoord_A8 = input (Vragenlijst_autonomie [7])
  elif Welk_construct == ("extraversie"):
     Antwoord_E1 = input (Vragenlijst_extraversie [0])
     Antwoord_E2 = input (Vragenlijst_extraversie [1])
     Antwoord_E3 = input (Vragenlijst_extraversie [2])
     Antwoord_E4 = input (Vragenlijst_extraversie [3])
     Antwoord_E5 = input (Vragenlijst_extraversie [4])
     Antwoord_E6 = input (Vragenlijst_extraversie [5])
     Antwoord_E7 = input (Vragenlijst_extraversie [6])
     Antwoord_E8 = input (Vragenlijst_extraversie [7])
  elif Welk_construct == ("emotionele stabiliteit"):
     Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
     Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
     Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
     Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
     Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
     Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
     Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
     Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])

# wil je nog een construct meten?
while Nog_een != "ja" and Nog_een != "nee":
 print ("Let op: het antwoord moet expliciet ja of nee zijn en het programma is hoofdlettergevoelig.")
 Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")

# Nee
 if Nog_een == "nee":
  print ("Bedankt voor je deelname!")

 # ja
 if Nog_een == "ja":
     Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
     while Welk_construct != "vriendelijkheid" and Welk_construct != "emotionele stabiliteit" and Welk_construct != "extraversie" and Welk_construct != "consciëntieusheid" and Welk_construct != "autonomie":
      print ("Let op: het programma is hoofdletter gevoelig. Er dient niet met hoofdletters geschreven te worden.")
      Welk_construct = input ("Welk construct wilt je meten? Typ hier een van de vijf constructen.")
     if Welk_construct == ("vriendelijkheid"):
        Antwoord_V1 = input (Vragenlijst_vriendelijkheid [0])
        Antwoord_V2 = input (Vragenlijst_vriendelijkheid [1])
        Antwoord_V3 = input (Vragenlijst_vriendelijkheid [2])
        Antwoord_V4 = input (Vragenlijst_vriendelijkheid [3])
        Antwoord_V5 = input (Vragenlijst_vriendelijkheid [4])
        Antwoord_V6 = input (Vragenlijst_vriendelijkheid [5])
        Antwoord_V7 = input (Vragenlijst_vriendelijkheid [6])
        Antwoord_V8 = input (Vragenlijst_vriendelijkheid [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("consciëntieusheid"):
        Antwoord_C1 = input (Vragenlijst_consciëntieusheid [0])
        Antwoord_C2 = input (Vragenlijst_consciëntieusheid [1])
        Antwoord_C3 = input (Vragenlijst_consciëntieusheid [2])
        Antwoord_C4 = input (Vragenlijst_consciëntieusheid [3])
        Antwoord_C5 = input (Vragenlijst_consciëntieusheid [4])
        Antwoord_C6 = input (Vragenlijst_consciëntieusheid [5])
        Antwoord_C7 = input (Vragenlijst_consciëntieusheid [6])
        Antwoord_C8 = input (Vragenlijst_consciëntieusheid [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("autonomie"):
        Antwoord_A1 = input (Vragenlijst_autonomie [0])
        Antwoord_A2 = input (Vragenlijst_autonomie [1])
        Antwoord_A3 = input (Vragenlijst_autonomie [2])
        Antwoord_A4 = input (Vragenlijst_autonomie [3])
        Antwoord_A5 = input (Vragenlijst_autonomie [4])
        Antwoord_A6 = input (Vragenlijst_autonomie [5])
        Antwoord_A7 = input (Vragenlijst_autonomie [6])
        Antwoord_A8 = input (Vragenlijst_autonomie [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("extraversie"):
        Antwoord_E1 = input (Vragenlijst_extraversie [0])
        Antwoord_E2 = input (Vragenlijst_extraversie [1])
        Antwoord_E3 = input (Vragenlijst_extraversie [2])
        Antwoord_E4 = input (Vragenlijst_extraversie [3])
        Antwoord_E5 = input (Vragenlijst_extraversie [4])
        Antwoord_E6 = input (Vragenlijst_extraversie [5])
        Antwoord_E7 = input (Vragenlijst_extraversie [6])
        Antwoord_E8 = input (Vragenlijst_extraversie [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")
     elif Welk_construct == ("emotionele stabiliteit"):
        Antwoord_ES1 = input (Vragenlijst_emotionele_stabiliteit [0])
        Antwoord_ES2 = input (Vragenlijst_emotionele_stabiliteit [1])
        Antwoord_ES3 = input (Vragenlijst_emotionele_stabiliteit [2])
        Antwoord_ES4 = input (Vragenlijst_emotionele_stabiliteit [3])
        Antwoord_ES5 = input (Vragenlijst_emotionele_stabiliteit [4])
        Antwoord_ES6 = input (Vragenlijst_emotionele_stabiliteit [5])
        Antwoord_ES7 = input (Vragenlijst_emotionele_stabiliteit [6])
        Antwoord_ES8 = input (Vragenlijst_emotionele_stabiliteit [7])
        Nog_een = input ("Wil je nog een construct meten? Typ ja of nee.")
        if Nog_een == "nee":
         print ("Bedankt voor je deelname!")

# opslaan antwoorden
antwoorden_demografische_vragen = [Naam, Leeftijd, Geslacht]
antwoorden_vriendelijkheid = [Antwoord_V1, Antwoord_V2, Antwoord_V3, Antwoord_V4, Antwoord_V5, Antwoord_V6, Antwoord_V7, Antwoord_V8]
antwoorden_consciëntieusheid = [Antwoord_C1, Antwoord_C2, Antwoord_C3, Antwoord_C4, Antwoord_C5, Antwoord_C6, Antwoord_C7, Antwoord_C8]
antwoorden_autonomie = [Antwoord_A1, Antwoord_A2, Antwoord_A3, Antwoord_A4, Antwoord_A5, Antwoord_A6, Antwoord_A7, Antwoord_A8]
antwoorden_extraversie = [Antwoord_E1, Antwoord_E2, Antwoord_E3, Antwoord_E4, Antwoord_E5, Antwoord_E6, Antwoord_E7, Antwoord_E8]
antwoorden_emotionele_stabiliteit = [Antwoord_ES1, Antwoord_ES2, Antwoord_ES3, Antwoord_ES4, Antwoord_ES5, Antwoord_ES6, Antwoord_ES7, Antwoord_ES8, ]

data = open("antwoorden vragenijst", "a")
data.writelines(str(antwoorden_demografische_vragen) + "\n")
data.writelines(str(antwoorden_vriendelijkheid) + "\n")
data.writelines(str(antwoorden_consciëntieusheid) + "\n")
data.writelines(str(antwoorden_autonomie) + "\n")
data.writelines(str(antwoorden_extraversie) + "\n")
data.writelines(str(antwoorden_extraversie) + "\n")
data.writelines(str(antwoorden_emotionele_stabiliteit) + "\n")
data.close()

Body:
You can definitely clean this code up a bit, to make it a) shorter and b) cleaner.

For example, you have:

# antwoorden Vragenijst_emotionele_stabiliteit
Antwoord_ES1 = ("onbekend")
Antwoord_ES2 = ("onbekend")
Antwoord_ES3 = ("onbekend")
Antwoord_ES4 = ("onbekend")
Antwoord_ES5 = ("onbekend")
Antwoord_ES6 = ("onbekend")
Antwoord_ES7 = ("onbekend")
Antwoord_ES8 = ("onbekend")

This could be cleaned up by using a construct like this.  Note that python uses '0' based arrays/lists:

Antwoord_ES=[]
for i in range(0,7):
    Antwoord_ES.append("onbekend")

print(len(Antwoord_ES))

You can extend this idea to more dimensions.  See here for a reference: https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/


来源: stackexchange

问:
Debug Mocha tests being executed via NPM in terminal of VSCode
Does anyone know how to configure VSCode to debug Mocha tests when executing via a test script? Setup is:

"test" config in package.json of project specifying the mocha command to execute( mocha -R mochawesome -s 3000 -t 30000 ./index.js )

'npm test' command used in internal terminal of VSCode with '-g' param to allow for execution of specific descriptions within CoffeeScript test files

I want to be able to debug the execution of these individual tests(i.e. run 'npm test -- -g "test description"' in VSCode and break in VSCode's Debug view when it reaches a bp). Is this possible? Would an 'attach' config be needed instead of 'launch'?

I've tried the standard debug configs provided in VSCode , and tried to modify them based on info found in various places, but no success so far. Any help would be great, not too familiar with the IDE, or any of these processes Thanks!

答:
Late answer but it may help people falling on this question.

Adding inspect-brk will hold the process until you connect your debugger, vscode in this case. After that tests will run and stop on your debug points. Usually the listening port for debugging is 9229, but you'll see the correct port on the sysout.

```<code>mocha --inspect-brk test.js
</code>```

Credits to Run node inspector with mocha

ContentLicense: CC BY-SA 4.0

Body:
Late answer but it may help people falling on this question.

Adding inspect-brk will hold the process until you connect your debugger, vscode in this case. After that tests will run and stop on your debug points. Usually the listening port for debugging is 9229, but you'll see the correct port on the sysout.

mocha --inspect-brk test.js

Credits to Run node inspector with mocha


问:
Send multiple pieces of data through .ajax() for processing in PHP script
I'm trying to send two separate groups of information through .ajax() to a PHP script for processing and running into problems.

In this scenario, the user enters a page and 1) a timer starts counting seconds and 2) the user has to fill out a series of inputs for a form. I'd like to send both groups of information (the current timer count and all the user inputs) to a PHP script when the user clicks a submit button.

I've can successfully send either one group of info OR the other but can't figure out a way to send both groups of data simultaneously through .ajax() at the same time.

Here is the jQuery I've got now, which attempts to send both pieces of data but fails:

```<code> $(document).ready(function(){
    var count = 0;
    setInterval(function(){
        count++;
        $('#timer').html(count + ' secs.');
    },1000);

// displays user structureand suggested answers on structure page
$('#process_structure').click(function () {
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $('#inputs_structure').serialize(), data: {count: count},
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text);
})
});
</code>```

Any pointers would be greatly appreciated. Thanks!

答:
Assuming structure_process.php accepts both pieces of data together, you can use serializeArray() instead of serialize(), append your extra piece of data, and then use jQuery.param() to convert the array to a string that jQuery.ajax() will accept.

```<code>$('#process_structure').click(function () {
    var postData = $('#inputs_structure').serializeArray();
    postData.push({name: 'count', value: count});
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $.param(postData),
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text);
});
</code>```

ContentLicense: CC BY-SA 3.0

Body:
I'm trying to send two separate groups of information through .ajax() to a PHP script for processing and running into problems.

In this scenario, the user enters a page and 1) a timer starts counting seconds and 2) the user has to fill out a series of inputs for a form. I'd like to send both groups of information (the current timer count and all the user inputs) to a PHP script when the user clicks a submit button.

I've can successfully send either one group of info OR the other but can't figure out a way to send both groups of data simultaneously through .ajax() at the same time.

Here is the jQuery I've got now, which attempts to send both pieces of data but fails:

 $(document).ready(function(){
    var count = 0;
    setInterval(function(){
        count++;
        $('#timer').html(count + ' secs.');
    },1000);

// displays user structureand suggested answers on structure page
$('#process_structure').click(function () {
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $('#inputs_structure').serialize(), data: {count: count},
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text);
})
});

Any pointers would be greatly appreciated. Thanks!

Body:
Assuming structure_process.php accepts both pieces of data together, you can use serializeArray() instead of serialize(), append your extra piece of data, and then use jQuery.param() to convert the array to a string that jQuery.ajax() will accept.

$('#process_structure').click(function () {
    var postData = $('#inputs_structure').serializeArray();
    postData.push({name: 'count', value: count});
    var text = $.ajax ({
        type: "POST",
        url: "structure_process.php",
        data: $.param(postData),
        dataType: "json",
        async: false,
    }).responseText;
    $('#test_ajax').html(text);
});


问:
DART : Why dart apps are so big in size? (console app)
i made a console app  with dart that calculates 2 numbers and prints them
the size came about 5 MB !!

Download link (Windows only) https://drive.google.com/open?id=1sxlvlSZUdxewzFNiAv_bXwaUui2gs2yA

Here is the code

import 'dart:io';

int inputf1;
int inputf2;
int inputf3;

void main() {
  stdout.writeln('Type The First Number');
  var input1 = stdin.readLineSync();
  stdout.writeln('You typed: $input1 as the first number');
  sleep( Duration(seconds: 1));
  stdout.writeln('\nType The Second Number');
  var input2 = stdin.readLineSync();
  stdout.writeln('You typed: $input2 as the second number');
  sleep( Duration(seconds: 1));
  inputf1 = int.parse(input1);
  inputf2 = int.parse(input2);

  inputf3 = inputf1 + inputf2;
  print('\nfinal answer is : $inputf3');
  sleep( Duration(seconds: 10));
}
```

答:
It is because natively dart app are made by incorporate the render engine...  I know that is right for all the flutter app which are based on dart.
Look at this too https://medium.com/@rajesh.muthyala/app-size-in-flutter-5e56c464dea1</p>


问:
What is efficient way to check if current word is close to a word in string?
consider examples below :

Example 1 :

```<code>str1 = "wow...it  looks amazing"
str2 = "looks amazi"
</code>```

You see that amazi is close to amazing, str2 is mistyped, i wanted to write a program that will tell me that amazi is close to amazing then in str2 i will replace amazi with amazing

Example 2 :

```<code>str1 = "is looking good"
str2 = "looks goo"
</code>```

In this case updated str2 will be "looking good"

Example 3 :

```<code>str1 = "you are really looking good"
str2 = "lok goo"
</code>```

In this case str2 will be "good" as lok is not close to looking (or even if program can convert in this case lok to looking then it's just fine for my  problem's solution)

Example 4 :

```<code>str1 = "Stu is actually SEVERLY sunburnt....it hurts!!!"
str2 = "hurts!!"
</code>```

Updated str2 will be "hurts!!!"

Example 5 :

```<code>str1 = "you guys were absolutely amazing tonight, a..."
str2 = "ly amazin"
</code>```

Updated str2 will be "amazing", "ly" shall be removed or replace by absolutely.

What will be the  algo and  code for this?

Maybe we can do it by looking at character lexicographically and set a
threshold like 0.8 or 80% so if word2 gets 80% sequential characters of word1 from str1 then we replace word2 in str2 with word of str1?
Any other efficient solution with python code please?

答:
You can use Jacard coefficient in this case. First, you need to split your first and second string by space. After that, for every string in str2, take Jacard coefficient with every string in str1, then replace with which that gives you the highest Jacard coefficient.

You can use sklearn.metrics.jaccard_score.

Body:
consider examples below :

Example 1 :

str1 = "wow...it  looks amazing"
str2 = "looks amazi"

You see that amazi is close to amazing, str2 is mistyped, i wanted to write a program that will tell me that amazi is close to amazing then in str2 i will replace amazi with amazing

Example 2 :

str1 = "is looking good"
str2 = "looks goo"

In this case updated str2 will be "looking good"

Example 3 :

str1 = "you are really looking good"
str2 = "lok goo"

In this case str2 will be "good" as lok is not close to looking (or even if program can convert in this case lok to looking then it's just fine for my  problem's solution)

Example 4 :

str1 = "Stu is actually SEVERLY sunburnt....it hurts!!!"
str2 = "hurts!!"

Updated str2 will be "hurts!!!"

Example 5 :

str1 = "you guys were absolutely amazing tonight, a..."
str2 = "ly amazin"

Updated str2 will be "amazing", "ly" shall be removed or replace by absolutely.

What will be the  algo and  code for this?

Maybe we can do it by looking at character lexicographically and set a
threshold like 0.8 or 80% so if word2 gets 80% sequential characters of word1 from str1 then we replace word2 in str2 with word of str1?
Any other efficient solution with python code please?


问:
docker build Error checking context: 'can't stat '\\?\C:\Users\username\AppData\Local\Application Data''
docker build failed on windows 10,

After docker installed successfully, While building docker image using below command.

docker build -t drtuts:latest .
Facing below issue.

Kindly let me know if any one resolved same issue.

答:
I had same issue :-
error checking context: 'no permission to read from '\?\C:\Users\userprofile \AppData\Local\AMD\DxCache\36068d231d1a87cd8b4bf677054f884d500b364064779e16..bin''.

it was keep barking this issue , there was no problem with permission tried to run th command and different switch but haven't worked.

created dockerfiles folder  and put docker file there  and ran command from the folder path

C:\Users\ShaikhNaushad\dockerfiles> docker build  -t naushad/debian .

And it worked


问:
How do I determine if I need to annotate with @Bean
How do I determine in spring integration, that I need to annotate with @Bean?

For example lets look at a @Transformer annotation.

Consider the following code snippets:

1.

```<code>    @AllArgsConstructor
    @Getter
    @Setter
    @ToString
    private static class Person {
        private String firstName;
        private String lastName;
        private String phone;
    }

    @Override
    public void run(ApplicationArguments args) {
        firstChannel.send(MessageBuilder.withPayload(new Person("s", "f", null)).build());
    }

    // without bean
    @Transformer(inputChannel = FIRST_CHANNEL, outputChannel = SECOND_CHANNEL)
    public ContentEnricher contentEnricher() {
        ContentEnricher contentEnricher = new ContentEnricher();
        contentEnricher.setPropertyExpressions(ImmutableMap.of("phone", new ValueExpression("123")));
        return contentEnricher;
    }

    @ServiceActivator(inputChannel = SECOND_CHANNEL)
    private void fromSecondChannel(Message<?> message) {
        System.out.println(message.getPayload());
    }
</code>```

and

2.

```<code>    // with bean
    @Bean
    @Transformer(inputChannel = FIRST_CHANNEL, outputChannel = SECOND_CHANNEL)
    public HeaderEnricher headerEnricher() {
        return new HeaderEnricher(ImmutableMap.of("key1", new StaticHeaderValueMessageProcessor<>("value1")));
    }
</code>```

The output for the code snippet nr 2 without @Bean is :

```<code>GenericMessage [payload=org.springframework.integration.transformer.HeaderEnricher@15a3b42, headers={id=76d24f2c-8b64-a254-8733-8b5911871cce, timestamp=1590856526985}]
</code>```

and with @Bean is :

```<code>GenericMessage [payload=DemoApplication11.Person(firstName=s, lastName=f, phone=null), headers={key1=value1, id=55e5b4b7-9a4b-8822-4398-b42755bc7697, timestamp=1590856617667}]
</code>```

答:
No @Bean means the transformer is called as a POJO method.

@Transformer(...)
public String transform(String in) {
    return in.toUpperCase();
}
```

If the transformer is actually an implementation of Transformer (such as the header enricher), you need @Bean.

The ContentEnricher is not a transformer, it is a MessageHandler, so it must be annotated with @ServiceActivator and @Bean.

See the documentation and here.

Starting with version 4.0, you can configure messaging annotations on @Bean method definitions in @Configuration classes, to produce message endpoints based on the beans, not the methods. It is useful when @Bean definitions are “out-of-the-box” MessageHandler instances (AggregatingMessageHandler, DefaultMessageSplitter, and others), Transformer instances (JsonToObjectTransformer, ClaimCheckOutTransformer, and others), and MessageSource instances (FileReadingMessageSource, RedisStoreMessageSource, and others). The following example shows how to use messaging annotations with @Bean annotations ...

Body:
How do I determine in spring integration, that I need to annotate with @Bean?

For example lets look at a @Transformer annotation.

Consider the following code snippets:

1.

    @AllArgsConstructor
    @Getter
    @Setter
    @ToString
    private static class Person {
        private String firstName;
        private String lastName;
        private String phone;
    }

    @Override
    public void run(ApplicationArguments args) {
        firstChannel.send(MessageBuilder.withPayload(new Person("s", "f", null)).build());
    }

    // without bean
    @Transformer(inputChannel = FIRST_CHANNEL, outputChannel = SECOND_CHANNEL)
    public ContentEnricher contentEnricher() {
        ContentEnricher contentEnricher = new ContentEnricher();
        contentEnricher.setPropertyExpressions(ImmutableMap.of("phone", new ValueExpression("123")));
        return contentEnricher;
    }

    @ServiceActivator(inputChannel = SECOND_CHANNEL)
    private void fromSecondChannel(Message<?> message) {
        System.out.println(message.getPayload());
    }

and

2.

    // with bean
    @Bean
    @Transformer(inputChannel = FIRST_CHANNEL, outputChannel = SECOND_CHANNEL)
    public HeaderEnricher headerEnricher() {
        return new HeaderEnricher(ImmutableMap.of("key1", new StaticHeaderValueMessageProcessor<>("value1")));
    }

The output for the code snippet nr 2 without @Bean is :

GenericMessage [payload=org.springframework.integration.transformer.HeaderEnricher@15a3b42, headers={id=76d24f2c-8b64-a254-8733-8b5911871cce, timestamp=1590856526985}]

and with @Bean is :

GenericMessage [payload=DemoApplication11.Person(firstName=s, lastName=f, phone=null), headers={key1=value1, id=55e5b4b7-9a4b-8822-4398-b42755bc7697, timestamp=1590856617667}]

Body:
No @Bean means the transformer is called as a POJO method.

@Transformer(...)
public String transform(String in) {
    return in.toUpperCase();
}

If the transformer is actually an implementation of Transformer (such as the header enricher), you need @Bean.

The ContentEnricher is not a transformer, it is a MessageHandler, so it must be annotated with @ServiceActivator and @Bean.

See the documentation and here.

Starting with version 4.0, you can configure messaging annotations on @Bean method definitions in @Configuration classes, to produce message endpoints based on the beans, not the methods. It is useful when @Bean definitions are “out-of-the-box” MessageHandler instances (AggregatingMessageHandler, DefaultMessageSplitter, and others), Transformer instances (JsonToObjectTransformer, ClaimCheckOutTransformer, and others), and MessageSource instances (FileReadingMessageSource, RedisStoreMessageSource, and others). The following example shows how to use messaging annotations with @Bean annotations ...


问:
Plotly lines using start and end dates
I have a DataFrame with the columns: start date, end date, and value. How can I plot one line for each start-end date in Plotly?

Example:

```<code>import pandas as pd
import plotly.express as px
df = pd.DataFrame({"start date": [1,2,3,4], "end date":[8,7,4,9], "value":[11,3,11,4]})
fig = px.line(df, x=["start date","end date"], y="value")
fig.show()
</code>```

In this case, there are only two lines for the columns start date and end date. However, what I'm looking for is 1 line for each start-end date. I tried with the parameter color="value" but, in value 11 it only plots 1 line. I could print it with simple plot of plt as:

```<code>import matplotlib.pyplot as plt
x = [df["start date"], df["end date"]]
y = [df["value"], df["value"]]
plt.plot(x, y)
plt.show()
</code>```

答:
Actually your plot contains both lines at y=11, but they are blue & green and so hard to distinguish. But you can use custom colors, e.g.:

```<code>import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

colors = ['blue', 'red', 'yellow', 'green']
for x1, x2, y, c in zip(df["start date"], df["end date"], df["value"], colors):
    plt.plot([x1, x2], [y, y], color=c)
</code>```

Title: Plotly lines using start and end dates

Body:
I have a DataFrame with the columns: start date, end date, and value. How can I plot one line for each start-end date in Plotly?

Example:

import pandas as pd
import plotly.express as px
df = pd.DataFrame({"start date": [1,2,3,4], "end date":[8,7,4,9], "value":[11,3,11,4]})
fig = px.line(df, x=["start date","end date"], y="value")
fig.show()

In this case, there are only two lines for the columns start date and end date. However, what I'm looking for is 1 line for each start-end date. I tried with the parameter color="value" but, in value 11 it only plots 1 line. I could print it with simple plot of plt as:

import matplotlib.pyplot as plt
x = [df["start date"], df["end date"]]
y = [df["value"], df["value"]]
plt.plot(x, y)
plt.show()

Body:
Actually your plot contains both lines at y=11, but they are blue & green and so hard to distinguish. But you can use custom colors, e.g.:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

colors = ['blue', 'red', 'yellow', 'green']
for x1, x2, y, c in zip(df["start date"], df["end date"], df["value"], colors):
    plt.plot([x1, x2], [y, y], color=c)


问:
Pause splash screen until user responds to permission request in android app
in my android application i have a splash screen that lasts 5 seconds during those 5 seconds i ask the user to grant location permission , I want to pause the splash screen activity until the user grants or denies the permission request.If the activity is not paused until the user responds, the next activity will be activated without having the user's response about the permission request here's my code

SpalshScreen activity:

```<code>public class SplashScreen extends BaseActivity {

    private static int SPLASH_SCREEN_TIME_OUT = 6000;

    some properties ....

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//will hide the title
        getSupportActionBar().hide(); //hide the title bar
        setContentView(R.layout.activity_splash_screen);

       // This is the method that asks the user for permission
        locationPermGranted = CheckLocationPermission();

        deviceLanguage = Locale.getDefault().getDisplayLanguage();
        DeviceLanguageCode = Locale.getDefault().getLanguage();
        sharedPreferences = getSharedPreferences(getPackageName() + ".prefs", Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
        codeIntent = new Intent(SplashScreen.this, PhoneVerification.class);
        myIntent = new Intent(SplashScreen.this, ProfileSettings.class);
        loggedIntent = new Intent(SplashScreen.this, Main.class);
        notLoggedIntent = new Intent(SplashScreen.this, Login.class);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (!locationPermGranted) {

                    killApp();
                }

                if (sharedPreferences.getString("userLanguage", DeviceLanguageCode) == null) {
                    editor.apply();
                }

                if (sharedPreferences.getBoolean("isRegistered", false)) {

                    if (sharedPreferences.getBoolean("isPhoneVerified", false)) {

                        if (sharedPreferences.getBoolean("isLoggedIn", false)) {
                            // GO TO HOME

                            startActivity(loggedIntent);
                        } else {
                            // GO TO LOGIN
                            editor.apply();
                            startActivity(notLoggedIntent);
                        }

                    } else {
                        editor.apply();
                        startActivity(codeIntent);
                    }
                } else {
                    //GO TO PROFILE SETTINGS
                    editor.apply();
                    startActivity(myIntent);
                }

                finish();

            }
        }, SPLASH_SCREEN_TIME_OUT);

    }
</code>```

答:
Check the permission up front and if the permission is already granted, continue your Handler() and if not, then request for the permission and handle the result. Here's how:

Put all your Handler() code in a function so you can call it easily:

```<code>private void continueOperation(){
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            if (sharedPreferences.getString("userLanguage", DeviceLanguageCode) == null) {
                editor.apply();
            }

            if (sharedPreferences.getBoolean("isRegistered", false)) {

                if (sharedPreferences.getBoolean("isPhoneVerified", false)) {

                    if (sharedPreferences.getBoolean("isLoggedIn", false)) {
                        // GO TO HOME

                        startActivity(loggedIntent);
                    } else {
                        // GO TO LOGIN
                        editor.apply();
                        startActivity(notLoggedIntent);
                    }

                } else {
                    editor.apply();
                    startActivity(codeIntent);
                }
            } else {
                //GO TO PROFILE SETTINGS
                editor.apply();
                startActivity(myIntent);
            }

            finish();

        }
    }, SPLASH_SCREEN_TIME_OUT);
}
</code>```

Here, you don't have to check for permission because this function will only be called
with granted permission.

Then, put a permission check in onCreate():

```<code>if (!locationPermGranted)
    killApp();
else
    continueOperation();
</code>```

Now, handle the onRequestPermissionResult() and call continueOperation() if permission is granted.

In case, you don't want the user to wait for 6 seconds if the permission is granted in onRequestPermissionResult() which would obviously be bad UX, you can use the Handler() in the else{} of 2nd point. So, User will only have to wait if the permission was previously granted which is the basic purpose of a SplashScreen.

Body:
in my android application i have a splash screen that lasts 5 seconds during those 5 seconds i ask the user to grant location permission , I want to pause the splash screen activity until the user grants or denies the permission request.If the activity is not paused until the user responds, the next activity will be activated without having the user's response about the permission request here's my code

SpalshScreen activity:

public class SplashScreen extends BaseActivity {

    private static int SPLASH_SCREEN_TIME_OUT = 6000;

    some properties ....

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//will hide the title
        getSupportActionBar().hide(); //hide the title bar
        setContentView(R.layout.activity_splash_screen);

       // This is the method that asks the user for permission
        locationPermGranted = CheckLocationPermission();

        deviceLanguage = Locale.getDefault().getDisplayLanguage();
        DeviceLanguageCode = Locale.getDefault().getLanguage();
        sharedPreferences = getSharedPreferences(getPackageName() + ".prefs", Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
        codeIntent = new Intent(SplashScreen.this, PhoneVerification.class);
        myIntent = new Intent(SplashScreen.this, ProfileSettings.class);
        loggedIntent = new Intent(SplashScreen.this, Main.class);
        notLoggedIntent = new Intent(SplashScreen.this, Login.class);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (!locationPermGranted) {

                    killApp();
                }

                if (sharedPreferences.getString("userLanguage", DeviceLanguageCode) == null) {
                    editor.apply();
                }

                if (sharedPreferences.getBoolean("isRegistered", false)) {

                    if (sharedPreferences.getBoolean("isPhoneVerified", false)) {

                        if (sharedPreferences.getBoolean("isLoggedIn", false)) {
                            // GO TO HOME

                            startActivity(loggedIntent);
                        } else {
                            // GO TO LOGIN
                            editor.apply();
                            startActivity(notLoggedIntent);
                        }

                    } else {
                        editor.apply();
                        startActivity(codeIntent);
                    }
                } else {
                    //GO TO PROFILE SETTINGS
                    editor.apply();
                    startActivity(myIntent);
                }

                finish();

            }
        }, SPLASH_SCREEN_TIME_OUT);

    }

Body:
Check the permission up front and if the permission is already granted, continue your Handler() and if not, then request for the permission and handle the result. Here's how:

Put all your Handler() code in a function so you can call it easily:

private void continueOperation(){
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            if (sharedPreferences.getString("userLanguage", DeviceLanguageCode) == null) {
                editor.apply();
            }

            if (sharedPreferences.getBoolean("isRegistered", false)) {

                if (sharedPreferences.getBoolean("isPhoneVerified", false)) {

                    if (sharedPreferences.getBoolean("isLoggedIn", false)) {
                        // GO TO HOME

                        startActivity(loggedIntent);
                    } else {
                        // GO TO LOGIN
                        editor.apply();
                        startActivity(notLoggedIntent);
                    }

                } else {
                    editor.apply();
                    startActivity(codeIntent);
                }
            } else {
                //GO TO PROFILE SETTINGS
                editor.apply();
                startActivity(myIntent);
            }

            finish();

        }
    }, SPLASH_SCREEN_TIME_OUT);
}

Here, you don't have to check for permission because this function will only be called
with granted permission.

Then, put a permission check in onCreate():

if (!locationPermGranted)
    killApp();
else
    continueOperation();

Now, handle the onRequestPermissionResult() and call continueOperation() if permission is granted.

In case, you don't want the user to wait for 6 seconds if the permission is granted in onRequestPermissionResult() which would obviously be bad UX, you can use the Handler() in the else{} of 2nd point. So, User will only have to wait if the permission was previously granted which is the basic purpose of a SplashScreen.


问:
Apache HUE, can login using REST API, but the rest doesn't work
I'm struggling with Apache HUE Rest API and django csrf.

The problem is that I can kind-a login, but the rest doesn't work. I always get redirected to login page. Seems like server doesn't like my csrftoken or sessionid cookie.

I have absolutely no idea why.
Here is my login code:

val accessToken = getAccessToken(Http(s"$baseUrl/accounts/login/?next=/").asString)
    val response =
      Http(s"$baseUrl/accounts/login/")
        .postForm(Seq(
          "username" -> username,
          "password" -> password,
          "csrfmiddlewaretoken" -> accessToken.csrftoken.getValue,
          "next" -> "/"
        ))
        .cookie(accessToken.csrftoken)
        .asString
    getAccessToken(response) // wrapper for cookies and headers from response
```

<p>Now I try just to get page from HUE protected with csrf</p>

<pre class="lang-scala prettyprint-override"><code> def getDir(hdfsPathDirParent: String): Unit = {
    val accessToken = login()
    val response = Http(s"$baseUrl/filebrowser/view=$hdfsPathDirParent")
      .cookie(accessToken.csrftoken) // retrieved after login
      .cookie(accessToken.sessionid) // retrieved after login
      .header("X-CSRFToken", accessToken.csrftoken.getValue)
      .header("Host", "localhost:8888")
      .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
      .header("Connection", "keep-alive")
      .header("Sec-Fetch-Dest", "empty")
      .header("Sec-Fetch-Mode", "cors")
      .header("Sec-Fetch-Site", "same-origin")
      //.header("Sec-Fetch-User", "?1")
      .header("Upgrade-Insecure-Requests", "1")
      .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")
      .header("Accept-Encoding", "gzip, deflate, br")

      .header("Accept-Language", "en,en-US;q=0.9,ru;q=0.8")
      .header("Cache-Control", "max-age=0")
      .header("X-Requested-With", "XMLHttpRequest")

      .asString

</code>```

I literally copy-pasted all tokens from Google Chrome debug panel. It doesn't work

```<code>[30/May/2020 05:19:29 -0700] access       WARNING  172.17.0.1 test_user - "POST /accounts/login/ HTTP/1.1" -- Successful login for user: test_user
[30/May/2020 05:19:29 -0700] middleware   INFO     Redirecting to login page: /filebrowser/view=/user/test_user
[30/May/2020 05:19:29 -0700] access       INFO     172.17.0.1 -anon- - "GET /filebrowser/view=/user/test_user HTTP/1.1" -- login redirection
</code>```

So I do pass login form, but the rest doesn't work. Can't find what I miss...

Their code example doesn't work

```<code>http://cloudera.github.io/hue/latest/developer/api/
</code>```

答:
Aren't you getting back a HTTP 302 redirect instead of a 200? (so you would need to follow it with your code).

Also above doc site is stale, https://docs.gethue.com/developer/api/#python is the new one.

Body:
I'm struggling with Apache HUE Rest API and django csrf.

The problem is that I can kind-a login, but the rest doesn't work. I always get redirected to login page. Seems like server doesn't like my csrftoken or sessionid cookie.

I have absolutely no idea why.
Here is my login code:

val accessToken = getAccessToken(Http(s"$baseUrl/accounts/login/?next=/").asString)
    val response =
      Http(s"$baseUrl/accounts/login/")
        .postForm(Seq(
          "username" -> username,
          "password" -> password,
          "csrfmiddlewaretoken" -> accessToken.csrftoken.getValue,
          "next" -> "/"
        ))
        .cookie(accessToken.csrftoken)
        .asString
    getAccessToken(response) // wrapper for cookies and headers from response

Now I try just to get page from HUE protected with csrf

 def getDir(hdfsPathDirParent: String): Unit = {
    val accessToken = login()
    val response = Http(s"$baseUrl/filebrowser/view=$hdfsPathDirParent")
      .cookie(accessToken.csrftoken) // retrieved after login
      .cookie(accessToken.sessionid) // retrieved after login
      .header("X-CSRFToken", accessToken.csrftoken.getValue)
      .header("Host", "localhost:8888")
      .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
      .header("Connection", "keep-alive")
      .header("Sec-Fetch-Dest", "empty")
      .header("Sec-Fetch-Mode", "cors")
      .header("Sec-Fetch-Site", "same-origin")
      //.header("Sec-Fetch-User", "?1")
      .header("Upgrade-Insecure-Requests", "1")
      .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")
      .header("Accept-Encoding", "gzip, deflate, br")

      .header("Accept-Language", "en,en-US;q=0.9,ru;q=0.8")
      .header("Cache-Control", "max-age=0")
      .header("X-Requested-With", "XMLHttpRequest")

      .asString

I literally copy-pasted all tokens from Google Chrome debug panel. It doesn't work

[30/May/2020 05:19:29 -0700] access       WARNING  172.17.0.1 test_user - "POST /accounts/login/ HTTP/1.1" -- Successful login for user: test_user
[30/May/2020 05:19:29 -0700] middleware   INFO     Redirecting to login page: /filebrowser/view=/user/test_user
[30/May/2020 05:19:29 -0700] access       INFO     172.17.0.1 -anon- - "GET /filebrowser/view=/user/test_user HTTP/1.1" -- login redirection

So I do pass login form, but the rest doesn't work. Can't find what I miss...

Their code example doesn't work

http://cloudera.github.io/hue/latest/developer/api/


问:
Replacing one row with another row at certain index of dataframe and changing cell value
I have a sample csv like this :

```<code>                 keys                       key_regex    datatype detailed_datatype precedence  val_regex     val_regex_2  val_regex_3  max_words  alpha_char_check
0      billingAddress      original_billing_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
1     deliveryAddress     original_delivery_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
2         notifyParty     original_notify_party_regex  alphabetic        alphabetic    primary        NaN             NaN          NaN        NaN               NaN
3       originAddress   original_seller_address_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
4   billingAddressAlt   alternative_billing_key_regex  alphabetic           address   tertiary        NaN             NaN          NaN        NaN               NaN
5  deliveryAddressAlt  alternative_delivery_key_regex  alphabetic           address   tertiary        NaN             NaN          NaN        5.0               1.0
6    originAddressAlt    alternative_seller_key_regex  alphabetic           address   tertiary        NaN  sample_val_re1          NaN        NaN               0.0
</code>```

I'm trying to replace the rows for which keys column have value as the key in the tertiary_row_replacement_dict with the rows with the keys column value as the corresponding value and then rename the precendence column value from 'tertiary' to 'primary' - while keeping the index position same as before.

The expected output is like this :

```<code>              keys                       key_regex    datatype detailed_datatype precedence  val_regex     val_regex_2  val_regex_3  max_words  alpha_char_check
0   billingAddress   alternative_billing_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
1  deliveryAddress  alternative_delivery_key_regex  alphabetic           address    primary        NaN             NaN          NaN        5.0               1.0
2      notifyParty     original_notify_party_regex  alphabetic        alphabetic    primary        NaN             NaN          NaN        NaN               NaN
3    originAddress    alternative_seller_key_regex  alphabetic           address    primary        NaN  sample_val_re1          NaN        NaN               0.0
</code>```

There are 3 original csvs - each of them are huge with lots of similar cases i.e. keys with primary precedence and their alternative keys with tertiary precedence. I've dictionary with the keys' alter like this :

```<code>tertiary_row_replacement_dict = {
    "originAddress": "originAddressAlt",
    "deliveryAddress": "deliveryAddressAlt",
    # "totalAmount": "totalAmountAlt",
    "billingAddress": "billingAddressAlt"
    ....
}
</code>```

Provided that the keys and the corresponding values of this dictionary would be always present in the csv, I have this code :

```<code>for k, new_k in row_replacement_dict.items():
    t2 = df.loc[df['keys']==new_k].index[0]
    df.loc[df.loc[df['keys']==k].index[0]] = [i if i!='tertiary' else 'primary' for i in df.loc[t2]]
    df = df.replace([new_k, 'tertiary'], [k, 'primary']).drop([t2])
</code>```

It accomplishes what I am trying to do. It takes around 0.034 seconds to do this just on the test csv and might not be best or optimized way to handle this case of replacing just the rows and replace the cell values. Is there any faster alternative way with the prerequisite knowledge which rows to be replaced with which one (i.e. it's not mandatory to use that dictionary, we can use it as list of tuples of list of lists for speed trade off).

答:
You can use replace to replace the tertiary keys with the primary keys and groupby().first() to fill in the information:

```<code>inverse_dict = {v:k for k,v in tertiary_row_replacement_dict.items()}
(df.groupby(df['keys'].replace(inverse_dict))
   .first()
   .reset_index(drop=True)
)
</code>```

Output:

```<code>    keys             key_regex                      datatype    detailed_datatype    precedence      val_regex  val_regex_2       val_regex_3    max_words    alpha_char_check
--  ---------------  -----------------------------  ----------  -------------------  ------------  -----------  --------------  -------------  -----------  ------------------
 0  billingAddress   original_billing_key_regex     alphabetic  address              primary               nan  nan                       nan          nan                 nan
 1  deliveryAddress  original_delivery_key_regex    alphabetic  address              primary               nan  nan                       nan            5                   1
 2  notifyParty      original_notify_party_regex    alphabetic  alphabetic           primary               nan  nan                       nan          nan                 nan
 3  originAddress    original_seller_address_regex  alphabetic  address              primary               nan  sample_val_re1            nan          nan                   0
</code>```

Body:
I have a sample csv like this :

                 keys                       key_regex    datatype detailed_datatype precedence  val_regex     val_regex_2  val_regex_3  max_words  alpha_char_check
0      billingAddress      original_billing_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
1     deliveryAddress     original_delivery_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
2         notifyParty     original_notify_party_regex  alphabetic        alphabetic    primary        NaN             NaN          NaN        NaN               NaN
3       originAddress   original_seller_address_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
4   billingAddressAlt   alternative_billing_key_regex  alphabetic           address   tertiary        NaN             NaN          NaN        NaN               NaN
5  deliveryAddressAlt  alternative_delivery_key_regex  alphabetic           address   tertiary        NaN             NaN          NaN        5.0               1.0
6    originAddressAlt    alternative_seller_key_regex  alphabetic           address   tertiary        NaN  sample_val_re1          NaN        NaN               0.0

I'm trying to replace the rows for which keys column have value as the key in the tertiary_row_replacement_dict with the rows with the keys column value as the corresponding value and then rename the precendence column value from 'tertiary' to 'primary' - while keeping the index position same as before.

The expected output is like this :

              keys                       key_regex    datatype detailed_datatype precedence  val_regex     val_regex_2  val_regex_3  max_words  alpha_char_check
0   billingAddress   alternative_billing_key_regex  alphabetic           address    primary        NaN             NaN          NaN        NaN               NaN
1  deliveryAddress  alternative_delivery_key_regex  alphabetic           address    primary        NaN             NaN          NaN        5.0               1.0
2      notifyParty     original_notify_party_regex  alphabetic        alphabetic    primary        NaN             NaN          NaN        NaN               NaN
3    originAddress    alternative_seller_key_regex  alphabetic           address    primary        NaN  sample_val_re1          NaN        NaN               0.0

There are 3 original csvs - each of them are huge with lots of similar cases i.e. keys with primary precedence and their alternative keys with tertiary precedence. I've dictionary with the keys' alter like this :

tertiary_row_replacement_dict = {
    "originAddress": "originAddressAlt",
    "deliveryAddress": "deliveryAddressAlt",
    # "totalAmount": "totalAmountAlt",
    "billingAddress": "billingAddressAlt"
    ....
}

Provided that the keys and the corresponding values of this dictionary would be always present in the csv, I have this code :

for k, new_k in row_replacement_dict.items():
    t2 = df.loc[df['keys']==new_k].index[0]
    df.loc[df.loc[df['keys']==k].index[0]] = [i if i!='tertiary' else 'primary' for i in df.loc[t2]]
    df = df.replace([new_k, 'tertiary'], [k, 'primary']).drop([t2])

It accomplishes what I am trying to do. It takes around 0.034 seconds to do this just on the test csv and might not be best or optimized way to handle this case of replacing just the rows and replace the cell values. Is there any faster alternative way with the prerequisite knowledge which rows to be replaced with which one (i.e. it's not mandatory to use that dictionary, we can use it as list of tuples of list of lists for speed trade off).

Body:
You can use replace to replace the tertiary keys with the primary keys and groupby().first() to fill in the information:

inverse_dict = {v:k for k,v in tertiary_row_replacement_dict.items()}
(df.groupby(df['keys'].replace(inverse_dict))
   .first()
   .reset_index(drop=True)
)

Output:

    keys             key_regex                      datatype    detailed_datatype    precedence      val_regex  val_regex_2       val_regex_3    max_words    alpha_char_check
--  ---------------  -----------------------------  ----------  -------------------  ------------  -----------  --------------  -------------  -----------  ------------------
 0  billingAddress   original_billing_key_regex     alphabetic  address              primary               nan  nan                       nan          nan                 nan
 1  deliveryAddress  original_delivery_key_regex    alphabetic  address              primary               nan  nan                       nan            5                   1
 2  notifyParty      original_notify_party_regex    alphabetic  alphabetic           primary               nan  nan                       nan          nan                 nan
 3  originAddress    original_seller_address_regex  alphabetic  address              primary               nan  sample_val_re1            nan          nan                   0


问:
Jquery: How can disabled/enabled option dynamically
Can someone help me with the code that I need to activate / deactivate some option?
I have 4 different selects.
First of all I need that jquery check that there are no values greater than the variable stock (I think this is done).
After this I need that when one select changes, check the value of the other selects options and deactivate them if the value is greater than the available stock.
I need to dynamically handle the content of the selects and they are activated / deactivated according to the stock.

I have this code, It works "well" with the first select, but when I change the second select it affects the first one.
I don't know if I explained correctly, but in the jsfiddle/Code I think the idea is better explained
https://jsfiddle.net/apejqfsg/17/

HTML

<select id="select1" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select2" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select3" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select4" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>

Max Stock: 8

```

<p><strong>JQUERY</strong></p>

<pre class="lang-js prettyprint-override"><code>$(document).ready(function () {
  var previous;
  var maxStock = 8;
  $(".stock option")
    .filter(function () {
      return $(this).val() > maxStock;
    })
    .prop("disabled", true);

  $(".stock")
    .focus(function () {
      previous = this.value;
      $(".stock option").each(function () {});
    })
    .change(function () {
      maxStock = maxStock + (previous - this.value);
      var value = this.value;
      var id = $(this).attr("id");
      $(".stock option").each(function () {
        var idParent = $(this).parent().attr("id");
        if (id != idParent) {
          if (this.value > maxStock) {
            this.disabled = true;
          }
        }
      });
      previous = this.value;
      $("#disponibles").html(maxStock);
    });
});
</code>```

答:
Implementation using on change.

```<code>$(document).ready(function() {
  var maxStock = 8;
  var selectedValue;
  var $currentSelect;
  var optionValue;
  var $selectBox;

    // Disable All Options having value > maxStock
  $('.stock option').filter(function() {
    return $(this).val() > maxStock;
  }).prop('disabled', true);

  $('.stock').change(function() {
    $currentSelect = $(this);
    selectedValue = $currentSelect.data('selected-value');
    if (selectedValue) {
      maxStock = maxStock + parseInt(selectedValue);
    }
    selectedValue = parseInt($currentSelect.val());
    maxStock = maxStock - selectedValue;
    $currentSelect.data('selected-value', $currentSelect.val());
    $('#disponibles').text(maxStock);

    // Update options after selection
    $(".stock").each(function() {

      $selectBox = $(this);
      if (!$selectBox.is($currentSelect)) {
         selectedValue = parseInt($selectBox.val());
        if (!selectedValue) {
          selectedValue = 0;
        }
        $selectBox.find('option').each(function() {
          optionValue = $(this).val();
          if (optionValue > maxStock && optionValue > selectedValue) {
            $(this).prop('disabled', true);
          } else {
            $(this).prop('disabled', false);
          }
        });
      }
    });

  });
});
</code>```

You can test using fiddle link

Body:
Can someone help me with the code that I need to activate / deactivate some option?
I have 4 different selects.
First of all I need that jquery check that there are no values greater than the variable stock (I think this is done).
After this I need that when one select changes, check the value of the other selects options and deactivate them if the value is greater than the available stock.
I need to dynamically handle the content of the selects and they are activated / deactivated according to the stock.

I have this code, It works "well" with the first select, but when I change the second select it affects the first one.
I don't know if I explained correctly, but in the jsfiddle/Code I think the idea is better explained
https://jsfiddle.net/apejqfsg/17/

HTML

<select id="select1" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select2" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select3" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select id="select4" class="stock">
  <option value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>

Max Stock: 8

JQUERY

$(document).ready(function () {
  var previous;
  var maxStock = 8;
  $(".stock option")
    .filter(function () {
      return $(this).val() > maxStock;
    })
    .prop("disabled", true);

  $(".stock")
    .focus(function () {
      previous = this.value;
      $(".stock option").each(function () {});
    })
    .change(function () {
      maxStock = maxStock + (previous - this.value);
      var value = this.value;
      var id = $(this).attr("id");
      $(".stock option").each(function () {
        var idParent = $(this).parent().attr("id");
        if (id != idParent) {
          if (this.value > maxStock) {
            this.disabled = true;
          }
        }
      });
      previous = this.value;
      $("#disponibles").html(maxStock);
    });
});

Body:
Implementation using on change.

$(document).ready(function() {
  var maxStock = 8;
  var selectedValue;
  var $currentSelect;
  var optionValue;
  var $selectBox;

    // Disable All Options having value > maxStock
  $('.stock option').filter(function() {
    return $(this).val() > maxStock;
  }).prop('disabled', true);

  $('.stock').change(function() {
    $currentSelect = $(this);
    selectedValue = $currentSelect.data('selected-value');
    if (selectedValue) {
      maxStock = maxStock + parseInt(selectedValue);
    }
    selectedValue = parseInt($currentSelect.val());
    maxStock = maxStock - selectedValue;
    $currentSelect.data('selected-value', $currentSelect.val());
    $('#disponibles').text(maxStock);

    // Update options after selection
    $(".stock").each(function() {

      $selectBox = $(this);
      if (!$selectBox.is($currentSelect)) {
         selectedValue = parseInt($selectBox.val());
        if (!selectedValue) {
          selectedValue = 0;
        }
        $selectBox.find('option').each(function() {
          optionValue = $(this).val();
          if (optionValue > maxStock && optionValue > selectedValue) {
            $(this).prop('disabled', true);
          } else {
            $(this).prop('disabled', false);
          }
        });
      }
    });

  });
});

You can test using fiddle link


问:
iOS simulator - How can I make default simulator as iPhone
I downloaded latest XCode with iOS 4.2 version.
When I'm testing any app in simulator, its running in ipad simulator by default.
How can I make my simulator default to iPhone.</p>

答:
I finally solved this problem myself.

First, install new version of xCode, which is xCode 4.

Then set project scheme to iphone simulator and run app in xCode several times.

And re-install xCode 3 and the problem will be gone away!

ContentLicense: CC BY-SA 2.5