summaryrefslogtreecommitdiff
path: root/python/problems/lists_and_for/perfect_numbers/sl.py
diff options
context:
space:
mode:
authorMartin <martin@leo.fri1.uni-lj.si>2015-10-09 11:17:49 +0200
committerMartin <martin@leo.fri1.uni-lj.si>2015-10-09 11:17:49 +0200
commit84f3426c937d1bb9d44ba25a71706416fbb8b85d (patch)
tree84b064c8150b6bbd3422fb2c91c6121e0a01902c /python/problems/lists_and_for/perfect_numbers/sl.py
parent45474b5c8cefa916aeb64e1c15a79f647a86d58c (diff)
Added several new problems.
They have no tests nor hints implemented.
Diffstat (limited to 'python/problems/lists_and_for/perfect_numbers/sl.py')
-rw-r--r--python/problems/lists_and_for/perfect_numbers/sl.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/python/problems/lists_and_for/perfect_numbers/sl.py b/python/problems/lists_and_for/perfect_numbers/sl.py
new file mode 100644
index 0000000..bc02d00
--- /dev/null
+++ b/python/problems/lists_and_for/perfect_numbers/sl.py
@@ -0,0 +1,96 @@
+# coding=utf-8
+import server
+mod = server.problems.load_language('python', 'sl')
+
+
+id = 217
+name = 'Popolna števila'
+slug = 'Popolna števila'
+
+
+description = '''\
+<p> Napiši program, ki izpiše "je popolno", če je podano število popolno, oz.
+"ni popolno", če ni. Popolna števila so števila, ki so enaka vsoti svojih
+deliteljev (brez samega sebe). Primer popolnega števila je 28,
+saj so njegovi delitelji 1, 2, 4, 7, 14, njihova vsota,
+1+2+4+7+14 pa je spet enaka 28. </p>'''
+
+input_clause = ['''\
+Uporabi funkcijo <code>input</code>.
+''']
+
+range_function = ['''\
+Uporabi funkcijo <code>range(a,b)</code>
+''',
+ '''\
+<p>Funkcija <code>range(a, b)</code> pripravi seznam števil od a do števila b-1. Poskusi!</p>''',
+ '''\
+<p>Z zanko <code>for</code> se sprehodi čez elemente seznama oz. v našem primeru
+čez vsa števila od <code>a</code> do <code>b-1</code>.</p>
+''']
+
+divisor = ['''\
+<p>Operator % vrne ostanek pri deljenju.</p>''',
+ '''\
+<pre>
+>>> 5%3
+2
+>>> 17%8
+1
+</pre>''',
+ '''\
+<p>Če je ostanek pri deljenju števila <code>a</code> s številom <code>b</code> enak 0, potem <code>b</code>
+deli število <code>a</code>. </p>''',
+ '''\
+<pre>
+if a%b == 0:
+ # b je delitelj števila a
+</pre>
+''']
+
+summing = ['''\
+<p>Če hočemo delitelje prišteti vsoti, moramo imeti vsoto nekje shranjeno.
+Torej potrebujemo spremenljivko.</p>''',
+ '''\
+<p>Nekako tako: </p>
+<pre>
+vsota = 0
+for ....
+ if ...
+ vsota += d # d deli izbrano število
+</pre>''']
+
+plan = ['''\
+<p>Gre za praktično enako nalogo, kot je bila prejšnja. Le na koncu
+moramo preveriti, če je vsota deliteljev enaka vnešenemu številu. </p>
+''']
+
+
+hint = {
+ 'input_clause': input_clause,
+
+ 'range_function': range_function,
+
+ 'printing': ['''\
+<p>Izpiši rezultat.</p>'''],
+
+ 'divisor': divisor,
+
+ 'final_hint': ['''\
+<p>Naloga rešena! <br>
+Podobno kot prejšnjo, lahko rešitev napišemo krajše: </p>
+<pre>
+n = int(input("Vpiši število: "))
+print(n == sum(i for i in range(1, n) if n % i == 0))
+</pre>'''],
+
+ 'summing': summing,
+
+ 'zero_division': [mod.general_msg['error_head'],
+ mod.general_msg['general_exception'],
+ '''\
+<p>Deljenje z nič ni dovoljeno!</p>''',
+ '''\
+<p>Računanje ostanka z operatorjem % je tudi deljenje.''']
+
+}