From 84f3426c937d1bb9d44ba25a71706416fbb8b85d Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Oct 2015 11:17:49 +0200 Subject: Added several new problems. They have no tests nor hints implemented. --- .../problems/lists_and_for/perfect_numbers/sl.py | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 python/problems/lists_and_for/perfect_numbers/sl.py (limited to 'python/problems/lists_and_for/perfect_numbers/sl.py') 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 = '''\ +

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.

''' + +input_clause = ['''\ +Uporabi funkcijo input. +'''] + +range_function = ['''\ +Uporabi funkcijo range(a,b) +''', + '''\ +

Funkcija range(a, b) pripravi seznam števil od a do števila b-1. Poskusi!

''', + '''\ +

Z zanko for se sprehodi čez elemente seznama oz. v našem primeru +čez vsa števila od a do b-1.

+'''] + +divisor = ['''\ +

Operator % vrne ostanek pri deljenju.

''', + '''\ +
+>>> 5%3
+2
+>>> 17%8
+1
+
''', + '''\ +

Če je ostanek pri deljenju števila a s številom b enak 0, potem b +deli število a.

''', + '''\ +
+if a%b == 0:
+    # b je delitelj števila a
+
+'''] + +summing = ['''\ +

Če hočemo delitelje prišteti vsoti, moramo imeti vsoto nekje shranjeno. +Torej potrebujemo spremenljivko.

''', + '''\ +

Nekako tako:

+
+vsota = 0
+for ....
+    if ...
+        vsota += d # d deli izbrano število
+
'''] + +plan = ['''\ +

Gre za praktično enako nalogo, kot je bila prejšnja. Le na koncu +moramo preveriti, če je vsota deliteljev enaka vnešenemu številu.

+'''] + + +hint = { + 'input_clause': input_clause, + + 'range_function': range_function, + + 'printing': ['''\ +

Izpiši rezultat.

'''], + + 'divisor': divisor, + + 'final_hint': ['''\ +

Naloga rešena!
+Podobno kot prejšnjo, lahko rešitev napišemo krajše:

+
+n = int(input("Vpiši število: "))
+print(n == sum(i for i in range(1, n) if n % i == 0))
+
'''], + + 'summing': summing, + + 'zero_division': [mod.general_msg['error_head'], + mod.general_msg['general_exception'], + '''\ +

Deljenje z nič ni dovoljeno!

''', + '''\ +

Računanje ostanka z operatorjem % je tudi deljenje.'''] + +} -- cgit v1.2.1