¿Cómo imprimo sólo el máximo valor en un ciclo for?

Debo hacer un programa para calcular el máximo común divisor de dos números, y decidí hacerlo con un ciclo for. El problema es que en mi código se imprimen todos los números que cumplen con los requisitos.

a=int(raw_input('Ingresa tu primer numero: '))
b=int(raw_input('Ingresa tu segundo numero: '))

#Separaremos dos casos
#Primero, cuando a sea mayor a b

if a>b:
    for i in range(1,a+1):
        if a % i == 0.:   #Aca vemos si hay algun numero i que al dividir a a no deje resto
            if b !=0:     #Aca tomamos la posibilad de que b sea distinto de cero
                if b % i == 0.:  #Y aca vemos si i tambien es divisor de b
                    print 'Maximo comun divisor para ', a, ' y ', b, ' es:'
                    print i
if b == 0:  #Aca tomamos la posibilidad de que b sea igual a cero
    print 'Maximo comun divisor para ', a, ' y ', b, ' es: ', a

#Ahora cuando b sea mayor a a

if b>a:
    for i in range(1,b+1):
        if b % i == 0.:
            if a !=0:
                if a % i == 0.:
                    print 'Maximo comun divisor para ', b, ' y ', a, ' son:'
                    print i
if a == 0:
    print 'Maximo comun divisor para ', b, ' y ', a, ' es: ', b

Por ejemplo, cuando ingreso los números 20 y 10, me imprime

Maximo comun divisor para 20 y 10 es:
1
Maximo comun divisor para 20 y 10 es:
2
Maximo comun divisor para 20 y 10 es:
5
Maximo comun divisor para 20 y 10 es:
10

Y sólo quiero que imprima el número más grande (en este caso el 10). Agradecería mucho su ayuda!!

3
задан 13.10.2016, 00:25
8 ответов

Ты можешь делать что-то asГ-:

a=int(raw_input('Ingresa tu primer numero: '))
b=int(raw_input('Ingresa tu segundo numero: '))

#Separaremos dos casos
#Primero, cuando a sea mayor a b

max_divisor = 1

if a>b:
    for i in range(1,a+1):
        if a % i == 0.:   #Aca vemos si hay algun numero i que al dividir a a no deje resto
            if b !=0:     #Aca tomamos la posibilad de que b sea distinto de cero
                if b % i == 0.:  #Y aca vemos si i tambien es divisor de b
                    if i > max_divisor:
                        max_divisor = i

if b == 0:  #Aca tomamos la posibilidad de que b sea igual a cero
    print 'Maximo comun divisor para ', a, ' y ', b, ' es: ', a

#Ahora cuando b sea mayor a a

if b>a:
    for i in range(1,b+1):
        if b % i == 0.:
            if a !=0:
                if a % i == 0.:
                    if i > max_divisor:
                        max_divisor = i

if a == 0:
    print 'Maximo comun divisor para ', b, ' y ', a, ' es: ', b

print 'Maximo comun divisor para ', a, ' y ', b, ' es:'
print max_divisor

Глаз, в b == 0 0 и в == 0 deberГ-схвати делать sys.exit (), чтобы заканчивать программу и не выполнять последний print

1
ответ дан 24.11.2019, 13:09
  • 1
    Функция и # 243; слишком большое добро!! Спасибо равный из-за observaci и # 243; n b == 0 и в == 0, не hab и # 237; в подумавший. – Carlos Villegas 11.10.2016, 16:38

Из-за того, что вносит другое решение (и немного больше шума):

def mcd(a,b):
    return next((i for i in range(min(a,b),0,-1) if a%i==0 and b%i==0), 0)
2
ответ дан 24.11.2019, 13:09
  • 1
    Я só entré в этот вопрос из-за " этот ruido" ;) – Cuauhtli 10.11.2018, 15:17
  • 2
    Очень хороший oí do ты имеешь despué s столького времени :) – ChemaCortes 10.11.2018, 20:46

В cГіdigo, что у тебя есть, красят все себе они nГєmeros, что выполняют ее condiciГіn, потому что он пробегает i разы цикл for.

if a>b:
    for i in range(1,a+1):
        if a % i == 0.:   #Aca vemos si hay algun numero i que al     dividir a a no deje resto
            if b !=0:     #Aca tomamos la posibilad de que b sea     distinto de cero
                if b % i == 0.:  #Y aca vemos si i tambien es divisor de b
                    print 'Maximo comun divisor para ', a, ' y ', b, ' es:'
                    print i

TendrГ-Схвати, что подтверждать из-за каждого возвращения цикла, если говорится о самом большем nГєmero, и podrГ, - чтобы делаться с одной condiciГіn и даже вспомогательный, и показывая из-за экрана despuГ©s цикла

if b % i == 0.:  #Y aca vemos si i tambien es divisor de b
    if i > aux:
        aux = i

aux мы это инициализируем в нуль. И despuГ©s цикла for мы красим самого большего

print 'Maximo comun divisor para ', a, ' y ', b, ' es:'
print aux

То же самое происходит с a> b как b> в, asГ - что serГ, - чтобы меняться в обоих циклах и уже не tendrГ - во что вытекать тебя все, sГіlo самые большие.

1
ответ дан 24.11.2019, 13:09

Лучшее, что ты можешь делать, и что приходит в голову мне, чтобы вычислять mcd работоспособного способа, состоит в том, чтобы использовать алгоритм euclides:

while x:
     x, y = y%x, x

mcd = y
1
ответ дан 24.11.2019, 13:09

со вспомогательной переменной ты можешь решать это следующего способа:

aux = 0
if a>b:
    for i in range(1,a+1):
        if a % i == 0.:   #Aca vemos si hay algun numero i que al dividir a a no deje resto
            if b !=0:     #Aca tomamos la posibilad de que b sea distinto de cero
                if b % i == 0.:  #Y aca vemos si i tambien es divisor de b
                    aux = i
    print 'Maximo comun divisor para ', a, ' y ', b, ' es:' 
    print aux

if b == 0:  #Aca tomamos la posibilidad de que b sea igual a cero
    print 'Maximo comun divisor para ', a, ' y ', b, ' es: ', a

#Ahora cuando b sea mayor a a

if b>a:
    for i in range(1,b+1):
        if b % i == 0.:
            if a !=0:
                if a % i == 0.:
                    aux = i
    print 'Maximo comun divisor para ', b, ' y ', a, ' son:'
    print aux
if a == 0:
    print 'Maximo comun divisor para ', b, ' y ', a, ' es: ', b
0
ответ дан 24.11.2019, 13:09
  • 1
    Инициализируй aux 1, не возможно делить из-за 0 – lapinkoira 11.10.2016, 16:18
  • 2
    ты прав, но в этом случае оно не использовано aux как делитель, хотя он был бы гораздо лучше, чтобы не иметь результат нуля в случае, что не между в цикле. хорошее наблюдение – Neyer 11.10.2016, 16:23
#una forma interesante de calcular el mcd es usando el algorito de Euclides
#sea a y b numeros naturales > 0 entonces el mcd se puede calcular de la siguiente manera:
a = 20
b = 30
c = a % b
while c > 0:
    a = b
    b = c
    c = a % b
print('el mcd es ', b)
0
ответ дан 24.11.2019, 13:09
  • 1
    Окончательно его один c и # 243; я говорю м и # 225; s f и # 225; cil, что мой jaja. Спасибо за комментарий, tendr и # 233; в счете – Carlos Villegas 11.10.2016, 16:51

Для меня ты был бы должен сохранять ее в дополнительной переменной... X пример max.... И условный, что не sobreescriba, если стоимость q уже содержит переменную, - больше в q, - x повторно писать... и вне цикла печатать max...... Этого он должен бы быть достаточным. Удача

0
ответ дан 24.11.2019, 13:09
  • 1
    Привет @JanetPerez, благополучное прибытие в SOes, ты можешь добавлять пример? – Alan 11.10.2016, 21:21

Для меня лучший выбор:

a=int(raw_input('Ingresa tu primer numero: '))
b=int(raw_input('Ingresa tu segundo numero: '))

sa = set([i for i in xrange(1,a+1) if not a%i]+[0])
sb = set([i for i in xrange(1,b+1) if not b%i]+[0])

c = max(sa & sb)
print 'Maximo comun divisor para ', b, ' y ', a, ' es: ', c
0
ответ дан 24.11.2019, 13:09

Теги

Похожие вопросы