Su ejemplo de Python es incorrecto 🙂 Está multiplicando por num
, no por i
– y el range
comienza desde 0 y no incluye el último número, por lo tanto, si configura num a 3, después de invertir imprimirá “¡Sonríe!” 2, 1 y 0 (es decir, solo nueva línea) veces (en lugar de 3, 2, 1).
Además, el uso de modo
anula por completo cualquier ventaja que pueda haber tenido al usar un iterador. Piénselo: los iteradores son geniales porque producen un elemento a la vez, siempre que sea necesario. Si los invierte, esto significa que su último elemento se necesita primero : no hay más remedio que “materializarlos” completamente en la memoria, porque ¿de qué otra manera sabrá qué elemento es el último? reversed
Así que aquí está la versión revisada:
def printSmile(num):
for i in xrange(num, 0, -1):
print "Smile!" * i
- ¿Por qué mi perro y mi gato siguen haciendo pipí en todas partes?
- Soy un soltero de 22 años que vive en casa haciendo más de 100 mil al año. ¿Cómo puedo evitar ser fuertemente gravado?
- A menudo pienso en la educación como la ‘solución obvia’ para la mayoría de los problemas que enfrenta el mundo. Si es así, ¿por qué los gobiernos no gastan más en eso?
- Me molesta vivir en esta sociedad de mierda. Solo quiero suicidarme. ¿Cuál es una manera fácil de morir?
- Soy fotógrafo y quiero saber cuáles son los mejores lugares que puedo visitar en la India.
Simplemente diga a xrange
que comience desde num
y termine en 0 (nuevamente, excluyendo 0) en el paso -1, es decir, hacia abajo.
Ahora, sobre C ++, aquí hay una solución simple:
#include
#include
usando el espacio de nombres estándar;
vacío printSmile (número int sin signo)
{
string s = “¡Sonríe!”;
for (unsigned int i = num; i> 0; i–) {
for (unsigned int j = 0; j <i; j ++) {
cout << s;
}
cout << endl;
}
}
int main (int argc, char * argv [])
{
printSmile (3);
}
También puede definir el operador “*” para cadenas y números, y usar eso:
#include
#include
#include // needed for operator*
usando el espacio de nombres estándar;
operador de cadena * (const string & s, unsigned int n)
{
cadena de flujo ret;
for (unsigned int i = 0; i <n; i ++) {
ret << s;
}
return ret.str ();
}
vacío printSmile (número int sin signo)
{
string s = “¡Sonríe!”;
for (unsigned int i = num; i> 0; i–) {
cout << s * i << endl;
}
}