motouniu 发表于 2018-9-11 15:18:14

关于《零基础python》里的else有一个代码不太明白

def showMaxFactor(num):
count=num//2
while count>1:
   if num%count==0:
   print('%d最大的约数是%d'%(num,count))
   break
   count-=1
   else:
    print('%d是素数'%num)
num= int(input('请输入一个数:'))
showMaxFactor(num)

各位大佬,上面这段代码大概我能明白,但我不明白为啥count-=1在这里有什么作用?
麻烦告知一下,因为我感觉break要么就直接终止了,要么其他情况就else了,多一个count-=1不知道有何用?

claws0n 发表于 2018-9-11 15:34:00

while count > 1: 所以当 count 小于或等于 1的时候就会退出循环。count 一开始是 num 的一半,慢慢减一。如果没有它,while true 就是死循环,不会结束。
缩进怪怪的。要条件判断成立才会进入 if 的内部。

BngThea 发表于 2018-9-11 16:25:41

如果不修改count的值,if判断永远为假,死循环了

Will_M 发表于 2018-9-11 16:45:34

看这个缩进很奇怪,else 和 if 对其的话,这样找到的素数不准确啊。

jackz007 发表于 2018-9-11 16:55:58


    楼主,你的程序是错的,运行这个程序你能得到正确答案?

    正确的版本应该是这样的:

    #!/usr/bin/env python
#coding:gbk

def showMaxFactor(num):
    count = num // 2
    while count > 1:
      if num % count == 0:
            print('%d 最大的约数是 %d' % (num , count))
            break
      else:
            count -= 1
    if count == 1:
      print('%d 是素数' % num)

num = int(input('请输入一个数:'))
showMaxFactor(num)

    你运行一下试试看。

    再一个,你的代码缩进非常不规范,这是极不好的习惯。

RIXO 发表于 2018-9-11 19:15:32

你的缩进贼奇怪,楼上那个的是对的,这个代码的目地是求最大公约数
逻辑是这样的
先判断是否能被他的一半(count)整除,如果不能,就判断是否能被他的一半(count)减一整除,直到count = 0 还没有找到能整除他的数,就判断这个数为素数
count - 1 就是循环中的一个条件

motouniu 发表于 2018-9-12 07:31:12

RIXO 发表于 2018-9-11 19:15
你的缩进贼奇怪,楼上那个的是对的,这个代码的目地是求最大公约数
逻辑是这样的
先判断是否能被他的一半 ...

谢谢你!

motouniu 发表于 2018-9-12 07:31:44

RIXO 发表于 2018-9-11 19:15
你的缩进贼奇怪,楼上那个的是对的,这个代码的目地是求最大公约数
逻辑是这样的
先判断是否能被他的一半 ...

谢谢亲的帮助
页: [1]
查看完整版本: 关于《零基础python》里的else有一个代码不太明白