from jutge import read
def zeros_o_uns(n):
z = 0 # nombre de zeros
u = 0 # nombre de uns
while n != 0:
if n % 2 == 1:
u += 1
else:
z += 1
n = n // 2
if z > u:
return 0
elif z < u:
return 1
else:
return 2
Enlloc de comptar el nombre uns i de zeros, comptar la seva diferència, amb una sola variable.
-
No adonar-se que cal fer una funció que rep un valor i en retorna un altre:
Fer un
read(n)
al començar fa que es perdi el valor sobre el qual cal aplicar la funció. Fer unprint(0 o 1 o 2)
al final provoca dos errors:- en primer lloc, s'ecriu un valor espuri a la sortida.
- en segon lloc, es fa que la funció no retorni res (de fet, retorna
None
).
-
Construir un nou nombre
b
que representan
en binari quan es llegeix en decimal!Sempre és mala idea:
- Al cap i a la fi, els nombres es representen ja en binari.
- Es perd el temps fent la conversió: és un pas intermig inútil.
- Els nombres en binari escrits en decimal solen ser molt llargs, poden haver-hi sobreeixements (per sort, en Python no, però en C++ sí).
- No funciona per a bases més grans que 10.
-
Afegir condicions inútils.
-
Tractar casos "especials" que no ho són. Per exemple, iterar mentre
n > 1
i tractar els casosn==0
on==1
a fora del bucle, quan a dins hagués fet el mateix. Un altre exemple: Tractar el cas `n==0 -
Oblidar-se que la divisió enter en Python3 és
//
i no/
. Al posar/
, comencen a aparèixer nombres reals i el bucle no acaba mai. -
Posar parèntesis al voltant de les condicions.
-
No utilitzar
elif
. -
Documentació que fa una paràfrasi del codi (per exemple,
z = z + 1 # incrementa la z
). -
Usar variables auxiliars que contenen una expressió molt senzilla que no s'utilitza mai més. Per exemple:
r = x % 2 if r == 1: ... else ...
-
Enviar-ho al Jutge com a programa en C++ enlloc de Python3.
-
Enviar al Jutge el notebook de Jupyter.