0 votes
in SoSci Survey (dt.) by s020324 (125 points)
edited by SoSci Survey

Hallo,
ich habe eine Aufgabe bei der Teilnehmende bei jeder richtigen Antwort eines Anagramms (mit jeweils nur einer Lösung) einen Punkt erhalten. Im Vortest hat alles gut funktioniert. Ein Softlaunch ergab nun, dass bei über 12% der Teilnehmenden einzelne oder mehrere richtige Antworten nicht gezählt wurden. Ich habe weder eine Übereinstimmung zwischen den Personen (Dauer, Zeitpunkt etc.) noch zwischen den nicht-erkannten Wörtern gefunden (alle wurden bei anderen doch erkannt). Hätten Sie vielleicht eine Idee, woran das liegen könnte?
Unten der Code für die Punktezählung. Danke für die Unterstützung.

if (strtolower(value('PT02_01')) == 'bild') {
  put ('PT06_01',1);
} if (strtolower(value('PT02_02')) == 'tomate') {
  put ('PT06_02',1);
} if (strtolower(value('PT02_03')) == 'zwiebel') {
  put ('PT06_03',1);
} if (strtolower(value('PT02_04')) == 'kartoffel') {
  put ('PT06_04',1);
} if (strtolower(value('PT02_05')) == 'ananas') {
  put ('PT06_05',1);
} if (strtolower(value('PT02_06')) == 'sonnenblume') {
  put ('PT06_06',1);
} if (strtolower(value('PT02_07')) == 'schwimmbad') {
  put ('PT06_07',1);
} if (strtolower(value('PT02_08')) == 'narzisse') {
  put ('PT06_08',1);
} if (strtolower(value('PT02_09')) == 'gurke') {
  put ('PT06_09',1);
} if (strtolower(value('PT02_10')) == 'kürbis') {
  put ('PT06_10',1);
} if (strtolower(value('PT02_11')) == 'handy') {
  put ('PT06_11',1);
} if (strtolower(value('PT02_12')) == 'küche') {
  put ('PT06_12',1);
} if (strtolower(value('PT02_13')) == 'bulgarien') {
  put ('PT06_13',1);
} if (strtolower(value('PT02_14')) == 'frankreich') {
  put ('PT06_14',1);
} if (strtolower(value('PT02_15')) == 'radio') {
  put ('PT06_15',1);
} if (strtolower(value('PT02_16')) == 'fernseher') {
  put ('PT06_16',1);
} if (strtolower(value('PT02_17')) == 'frühstück') {
  put ('PT06_17',1);
} if (strtolower(value('PT02_18')) == 'nilpferd') {
  put ('PT06_18',1);
} if (strtolower(value('PT02_19')) == 'lasagne') {
  put ('PT06_19',1);
} if (strtolower(value('PT02_20')) == 'tee') {
  put ('PT06_20',1);
} 

$points = valueSum ('PT06');

1 Answer

0 votes
by SoSci Survey (304k points)
selected by s020324
 
Best answer

Spontan habe ich zwei verdächtige: Leerzeichen und Umlaute.

Leerzeichen werden Sie mittels trim() lost. Umlaute werden von strtolower() nicht korrekt umgewandelt. Da könnte mb_strtolower() helfen.

Ich würde auch empfehlen, dass Sie auf ein Array umsteigen:

$correct = [
  ['PT02_01', 'bild', 'PT06_01'],
  ['PT02_02', 'tomate', 'PT06_02'],
  // ...
];
foreach ($correct as $entry) {
  if (mb_strtolower(trim(value($entry[0]))) == $entry[1]) {
    put($entry[2], 1);
  } else {
    put($entry[2], 0);
  }
}

Weitere Verdächtige: Falsche Variablen-Kennungen oder die Seite mit dem PHP-Code wurde nicht aufgerufen.

Sie können aber im Code einfach noch ein oder zwei debug() einfügen, um das Ganze besser nachvollziehbar zu machen. Lassen Sie sich damit z.B. das Ergebnis von strtolower() anzeigen:

debug(strtolower(value('PT02_01')));
by s020324 (125 points)
danke für die schnelle antwort. das war äußerst hilfreich.
die umlaute haben in der tat einen unterschied gemacht. die meisten fehler gab es bei "KÜCHE", "FRÜHSTÜCK" und "KÜRBIS" (doch systematisch). ich habe ihren array folgendermaßen kopiert und ergänzt:
$correct = [
  ['PT02_01', 'bild', 'PT06_01'],
  ['PT02_02', 'tomate', 'PT06_02'],
  ['PT02_03', 'zwiebel', 'PT06_03'],
  ['PT02_04', 'kartoffel', 'PT06_04'],
  ['PT02_05', 'ananas', 'PT06_05'],
  ['PT02_06', 'sonnenblume', 'PT06_06'],
  ['PT02_07', 'schwimmbad', 'PT06_07'],
  ['PT02_08', 'narzisse', 'PT06_08'],
  ['PT02_09', 'gurke', 'PT06_09'],
  ['PT02_10', 'kürbis', 'PT06_10'],
  ['PT02_11', 'handy', 'PT06_11'],
  ['PT02_12', 'küche', 'PT06_12'],
  ['PT02_13', 'bulgarien', 'PT06_13'],
  ['PT02_14', 'frankreich', 'PT06_14'],
  ['PT02_15', 'radio', 'PT06_15'],
  ['PT02_16', 'fernseher', 'PT06_16'],
  ['PT02_17', 'frühstück', 'PT06_17'],
  ['PT02_18', 'nilpferd', 'PT06_18'],
  ['PT02_19', 'lasagne', 'PT06_19'],
  ['PT02_20', 'tee', 'PT06_20'],
  // ...
];
foreach ($correct as $entry) {
  if (mb_strtolower(trim(value($entry[0]))) == $entry[1]) {
    put($entry[2], 1);
  } else {
    put($entry[2], 0);
  }
}

das funktioniert nun für diese drei begriffe sehr gut.

leerzeichen  lässt soscisurvey bei diesen antworten nicht zu.
in den daten ist ersichtlich, dass alle teilnehmenden auf der seite mit dem php-code waren und alle wörter wurden mindestens von einer person richtig beantwortet und bewertet. die überprüfung funktioniert wunderbar und ich habe es ein paar mal ausprobiert.
hätten sie noch eine andere idee, warum wörter in (einzelnen) fällen nicht erkannt wurden? diese wörter waren z.b. Radio, Tomate, Handy (manchmal wurden auch diese bei der gleichen person nicht erkannt).
herzlichen dank
by SoSci Survey (304k points)
> hätten sie noch eine andere idee, warum wörter in (einzelnen) fällen nicht erkannt wurden?

Nicht wirklich, aber mit ein paar Zeilen Debug-Code sollte das herauszufinden sein. Ergänzen Sie mal:

html(
  '<p>Eingabe: '.json_encode(strtolower(value('PT02_02'))).'</p>'.
  '<p>Vergleich: '.json_encode('tomate').'</p>'.
);

Und dann lassen Sie sich unter "Erhobene Daten" -> "Daten ansehen" mal die Druckansicht des Falls anzeigen, wo die Tomate nicht erkannt wurde.
by s020324 (125 points)
Vielen Dank für die Unterstützung und die schnelle und kompetenten Antworten. Bei mir sind keine Fehler mehr aufgetreten - in sehr vielen wiederholten Versuchen hat valueSum gezählt wie gewünscht. In dem html-Code hat sich auch nichts gezeigt. Entsprechend vertraue ich auf die jetzige Version.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...