Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
resultado separado por comas y al final un punto
#1
Buenos días, soy nuevo en el foro, y tras realizar mi presentación, solicito ayuda sobre este tema: 
Estoy intentando realizar un ejercicio en el que me piden los divisores de un número mayor que cero (salvo el mismo número y el 1). Más o menos lo tengo resuelto; pero necesito que me devuelva la lista de los divisores separados por comas y al final, tras el último divisor de la lista, que ponga un punto. Esto no soy capaz de conseguirlo. Aquí les dejo lo que he podido crear hasta ahora. Muchas gracias. 

a = int(input('Escribe un número entero mayor que cero: '))
if a>0:
    for i in range(2, a):
        
        if a%i==0:
            print(i,',',end='.')
                  
    if a%i!=0:
        print('El número', a, 'es primo')
            
            
if a<=0:
    print ('El número debe ser mayor que cero')
    
           
#Me falta que salga un punto despues del ultimo divisor. P. ej. con el 854
#Si pongo esto: print(i,',',end='.') sale esto: 2 ,.7 ,.14 ,.61 ,.122 ,.427 ,.
#Si pongo  esto: print(i,sep=', ',end='.')   sale esto: 2.7.14.61.122.427
#Necesito que salga 2, 7, 14, 61, 122, 427.
Responder
#2
Hola, ¿cómo estás?

El problema radica en que tal vez la funcionalidad de los parámetros sep y end no es tan intuitiva. sep indica qué cadena debe utilizarse como separador cuando se quieren imprimir múltiples valores en una misma llamada a print().

Código:
# Por defecto es un espacio.
>>> print(1, 2, 3, 4)
1 2 3 4
>>> print(1, 2, 3, 4, sep=", ")
1, 2, 3, 4

Por otro lado, end indica la cadena que se añadirá al final una vez imprimido el mensaje. Por defecto es "
" (el caracter de salto de línea), de modo que cada llamada a print() implica una línea nueva.

Lo que te propongo es que en lugar de ir imprimiendo por partes el mensaje, lo construyas previamente y lo imprimas al final como una cadena completa. El código sería más o menos así:

Código:
a = int(input('Escribe un número entero mayor que cero: '))
divisors = []

if a > 0:
   for i in range(2, a):
       
       if a % i == 0:
           divisors.append(str(i))
   
   print(", ".join(divisors) + ".")
           
if a <= 0:
   print('El número debe ser mayor que cero')

Lo que hacemos es ir almacenando los divisores que encontramos en una lista (previamente los convertimos a una cadena ya que luego deberemos unirlos todos). Al finalizar el bucle hacemos uso de la función str.join(), que conecta un conjunto de cadenas a partir de un separador determinado (en nuestro caso, una coma y un espacio). Por último añadimos el punto al final de la cadena con un simple signo de adición.

Te dejo un enlace a un artículo que escribí hace un tiempo sobre cómo determinar si un número es primo o no en Python: http://recursospython.com/guias-y-manual...os-primos/.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Muchas gracias Francisco. Visto así para super sencillo. y Además es una forma muy elegante de hacerlo.
Ahora encuentro otro problema, y es que el programa que me has resuelto funciona perfectamente, pero cuando intento hacer que cuando sea un numero primo me lo diga, o cuando introduzco el número 1, no me da salida, o me salen cosas raras. Tengo lo siguiente:

a = int(input('Escribe un número entero mayor que cero: '))
divisors = []
 

if a > 0:
   for i in range(2, a):
       
       if a % i == 0:
           divisors.append(str(i))
   
   print(", ".join(divisors) + ".")
     
else:
     print('El número', a,'es primo')
       
            
iif a <= 0:
           print('El número debe ser mayor que cero')

else:
        print('El número', a,'es primo')


y esto es lo que me sale:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
Escribe un número entero mayor que cero: 14
2, 7.
El número 14 es primo #Esto no debería salir
>>> ================================ RESTART ================================
>>> 
Escribe un número entero mayor que cero: 13
. #Este punto no debería salir
El número 13 es primo
>>> ================================ RESTART ================================
>>> 
Escribe un número entero mayor que cero: 1
#Este punto no debería salir
El número 1 es primo
>>> ================================ RESTART ================================
>>> 
Escribe un número entero mayor que cero: -1
El número -1 es primo #Esto no debería salir
El número debe ser mayor que cero
>>>
Responder
#4
El problema es que deberías utilizar alguna función para determinar si el número ingresado es primo. Copiando el código del enlace que dejé anteriormente, sería más o menos así:

Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def get_prime_numbers(max_number):
    # Crear una lista que contiene el estado (tachado/no tachado)
    # de cada número desde 2 hasta max_number.
    numbers = [True, True] + [True] * (max_number-1)
    # Se comienza por el 2. Esta variable siempre tiene un
    # número primo.
    last_prime_number = 2
    # Esta variable contiene el número actual en la lista,
    # que siempre es un múltiplo de last_prime_number.
    i = last_prime_number
    
    # Proceder siempre que el cuadrado de last_prime_number (es decir,
    # el último número primo obtenido) sea menor o igual que max_number.
    while last_prime_number**2 <= max_number:
        # Tachar todos los múltiplos del último número primo obtenido.
        i += last_prime_number
        while i <= max_number:
            numbers[i] = False
            i += last_prime_number
        # Obtener el número inmediatamente siguiente al último
        # número primo obtenido (last_prime_number) que no esté tachado.
        j = last_prime_number + 1
        while j < max_number:
            if numbers[j]:
                last_prime_number = j
                break
            j += 1
        i = last_prime_number
    
    # Retornar todas los números de la lista que no están tachados.
    return [i + 2 for i, not_crossed in enumerate(numbers[2:]) if not_crossed]


def is_prime(n):
    return n in get_prime_numbers(n)


a = int(input('Escribe un número entero mayor que cero: '))
divisors = []

if a > 0:
    if is_prime(a):
        print('El número es primo.')
    else:
        for i in range(2, a):
            if a % i == 0:
                divisors.append(str(i))
        
        print(", ".join(divisors) + ".")
else:
    print('El número debe ser mayor que cero')

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
Ok, muchísimas gracias. Voy a ver si lo descifro; pero funciona perfectamente. Eres un criack.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)