summaryrefslogtreecommitdiff
path: root/python/problems/lists_and_if-fkkt/itm
diff options
context:
space:
mode:
Diffstat (limited to 'python/problems/lists_and_if-fkkt/itm')
-rw-r--r--python/problems/lists_and_if-fkkt/itm/common.py86
-rw-r--r--python/problems/lists_and_if-fkkt/itm/sl.py53
2 files changed, 139 insertions, 0 deletions
diff --git a/python/problems/lists_and_if-fkkt/itm/common.py b/python/problems/lists_and_if-fkkt/itm/common.py
new file mode 100644
index 0000000..f8ae83a
--- /dev/null
+++ b/python/problems/lists_and_if-fkkt/itm/common.py
@@ -0,0 +1,86 @@
+import re
+from python.util import has_token_sequence, string_almost_equal, \
+ string_contains_number, get_tokens, get_numbers, get_exception_desc
+from server.hints import Hint
+
+id = 25011
+number = 7
+visible = True
+
+solution = '''\
+visina = float(input("Telesna višina [cm]: "))
+teza = float(input("Teža [kg]: "))
+indeks = teza / (visina/100) ** 2
+print("Vaš indeks telesne mase je: ", round(indeks,2))
+if indeks > 25:
+ print("Potrebno se bo več gibati in jesti bolj zdravo!")
+elif indeks < 18.5:
+ print("Pojejte kakšen kos torte več! ;)")
+else:
+ print("Super, nadaljujte s svojim življenskim stilom!")
+'''
+
+hint_type = {
+ 'if_clause': Hint('if_clause'),
+ 'printing': Hint('printing'),
+ 'no_input_call' : Hint('no_input_call'),
+ 'final_hint': Hint('final_hint')
+}
+
+def test(python, code, aux_code=''):
+ tokens = get_tokens(code)
+
+ test_in = [
+ (None, '189\n70\n'),
+ (None, '165\n70\n'),
+ (None, '170\n53\n')
+
+ ]
+ test_out = [
+ 'Vaš indeks telesne mase je: 19.6\nSuper, nadaljujte s svojim življenskim stilom!',
+ 'Vaš indeks telesne mase je: 25.71\nPotrebno se bo več gibati in jesti bolj zdravo!',
+ 'Vaš indeks telesne mase je: 18.34\nPojejte kakšen kos torte več! ;)'
+ ]
+
+ # List of outputs: (expression result, stdout, stderr, exception).
+ answers = python(code=aux_code+code, inputs=test_in, timeout=1.0)
+ outputs = [ans[1] for ans in answers]
+
+ n_correct = 0
+ tin = None
+ for i, (output, correct) in enumerate(zip(outputs, test_out)):
+ if re.sub('\s', '', output).endswith(re.sub('\s', '', correct)):
+ n_correct += 1
+ else:
+ tin = test_in[i][1]
+ tout = correct
+
+ passed = n_correct == len(test_in)
+ hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_in)}}]
+ if tin != None:
+ hints.append({'id': 'problematic_test_case', 'args': {'testin': str(tin), 'testout': str(tout)}})
+ else:
+ hints.append({'id' : 'final_hint'})
+ return passed, hints
+
+def hint(python, code, aux_code=''):
+ # run one test first to see if there are any exceptions
+ test_in = [(None, '189\n70\n')]
+ answer = python(code=aux_code+code, inputs=test_in, timeout=1.0)
+ exc = get_exception_desc(answer[0][3])
+ if exc: return exc
+
+ tokens = get_tokens(code)
+
+ # if input is not present in code, student needs to learn about input
+ if not has_token_sequence(tokens, ['input']):
+ return [{'id': 'no_input_call'}]
+
+ if not has_token_sequence(tokens, ['if']):
+ return [{'id' : 'if_clause'}]
+
+ # student is not using print function
+ if not has_token_sequence(tokens, ['print']):
+ return [{'id' : 'printing'}]
+
+ return None
diff --git a/python/problems/lists_and_if-fkkt/itm/sl.py b/python/problems/lists_and_if-fkkt/itm/sl.py
new file mode 100644
index 0000000..329ebff
--- /dev/null
+++ b/python/problems/lists_and_if-fkkt/itm/sl.py
@@ -0,0 +1,53 @@
+import server
+mod = server.problems.load_language('python', 'sl')
+
+
+name = 'Indeks telesne mase'
+slug = 'Indeks telesne mase'
+
+
+description = '''\
+<p>Napišite program, ki uporabnika vpraša po telesni višini in teži ter izračuna indeks telesne mase. Če je indeks manjši od 18.5, uporabniku sporočite, da je presuh in mu priporočite, da naj poje kakšen kos torte. Če je indeks telesne mase večji od 25, spodbudite uporabnika, da se začne več gibati in jesti bolj zdravo. Drugače pa uporabniku sporočite, da naj kar nadaljuje s svojim življenjskim stilom.<br>
+Primer uporabe:</p>
+
+<pre><code>Telesna višina [cm]: <span style="color: rgb(239, 69, 64);">189</span>
+Teža [kg]: <span style="color: rgb(239, 69, 64);">70</span>
+Vaš indeks telesne mase je: 19.6
+Super, nadaljujte s svojim življenskim stilom!
+
+Telesna višina [cm]: <span style="color: rgb(239, 69, 64);">170</span>
+Teža [kg]: <span style="color: rgb(239, 69, 64);">53</span>
+Vaš indeks telesne mase je: 18.34
+Pojejte kakšen kos torte več! ;)
+
+Telesna višina [cm]: <span style="color: rgb(239, 69, 64);">165</span>
+Teža [kg]: <span style="color: rgb(239, 69, 64);">70</span>
+Vaš indeks telesne mase je: 25.71
+Potrebno se bo več gibati in jesti bolj zdravo!
+</code></pre>
+'''
+
+if_clause = ['''\
+<p>Preveri, če ITM presega določeno mejo?</p>''',
+ '''\
+<p>Uporabi pogojni stavek <code>if</code>!</p>''',
+ '''\
+<pre>
+if x in seznam:
+</pre>''']
+
+
+plan = []
+
+hint = {
+ 'no_input_call': '''<p>Za branje uporabimo funkcijo <code>input</code></p>''',
+
+ 'if_clause': if_clause,
+
+ 'printing': ['''\
+<p>Izpiši rezultat.</p>'''],
+
+ 'final_hint': ['''\
+<p>Program deluje pravilno!</p>'''],
+
+}