lxx213 发表于 2020-12-23 22:12:46

萌新小白求助,第18讲FOR语言里的一个问题

在第18讲里 用for循环语言找出10以内的素数这个例子中,出现了一个问题求助。
当把程序里的else缩进到和 if in%x==0: 这句对应时候 运行结果出现了错误 显示如下
3 是一个素数
4 = 2 * 2
5 是一个素数
5 是一个素数
5 是一个素数
6 = 2 * 3
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
8 = 2 * 4
9 是一个素数
9 = 3 * 3


对比正确缩进结果有较大差异
2 是一个素数
3 是一个素数
4 = 2 * 2
5 是一个素数
6 = 2 * 3
7 是一个素数
8 = 2 * 4
9 = 3 * 3

现在能理解的应该是else缩进对应不同,导致break跳出的结果不同。
疑问一:为啥是从3开始打印 首先验证的2是否是因为没有对应的输出条件,所以没有输出。
疑问二:为啥5 和7会分别输出打印不同次数
疑问三:为啥9会出现素数验证失败

附注:错误代码如下
for n in range(2,10):
    for x in range(2,n):
      if n%x==0:
            print(n,'=',x,'*',n//x)
            break
      else:
            print(n,'是一个素数')

            

jackz007 发表于 2020-12-24 01:09:46

本帖最后由 jackz007 于 2020-12-24 09:45 编辑

      判断不是素数可以在内层循环中,但是,判断是素数得在内循环结束以后,由于 n = 2 的时候根本就无法进入内层循环,而判定素数的信息只能在内层循环中打印,所以,2 是素数的信息根本就无法打印。
      代码修改很简单,只要把 else 的缩进位置调整一下,将其从属关系由 if 语句调整为 for 语句就可以了, 这样,就做到了确认素数要在内层循环结束以后下结论。
for n in range(2 , 10):
    for x in range(2 , n):
      if n % x == 0 :
            print(n ,'=',x ,'*', n // x)
            break
    else:
      print(n , '是一个素数')

lxx213 发表于 2020-12-24 10:32:41

谢谢,疑问一大概明白了。
同时,错误代码情况下,出现的疑问二和疑问三能否也给解答一下?
页: [1]
查看完整版本: 萌新小白求助,第18讲FOR语言里的一个问题