summaryrefslogtreecommitdiff
path: root/python/problems/lists_and_for/perfect_numbers/sl.py
blob: bc02d0009e5a18512ba787872d57b8d0818102e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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.''']

}