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 funkcijoinput
.
''']
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
.
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.'''] }