在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 用python打印50-100素?cái)?shù)時(shí)為什么else要放在外面?

用python打印50-100素?cái)?shù)時(shí)為什么else要放在外面?

import math
for i in range(50,100+1):

for t in range(2,int(math.sqrt(i))+1):
    if i % t == 0:
        break
    else:
        print(i)
       

如果我這樣寫,打印出來的就是51,53,53,53,53,53....

import math
for i in range(50,100+1):

for t in range(2,int(math.sqrt(i))+1):
    if i % t == 0:
        break
else:
        print(i)

當(dāng)我把else拿出來的時(shí)候結(jié)果就正確了....但是我覺得這不符合邏輯???不是應(yīng)該在for循環(huán)里面就打印嗎?如果拿出來還在for循環(huán)里面嗎?

回答
編輯回答
病癮

ok,我們分兩點(diǎn)來說:
1、你的算法邏輯上有問題。

for t in range(2,int(math.sqrt(i))+1):
    if i % t == 0:
        break
    else:
        print(i)

你這段代碼的目的是為了判斷是否存在除1和本身外的其他約數(shù)。但是一旦i不能被t整除你就打印,這就錯(cuò)了,應(yīng)該是整個(gè)for循環(huán)結(jié)束仍不存在其他約數(shù)才打印,比如99不能被2整除,在你這里就打印了,顯然是錯(cuò)的。所以正確的做法是判斷循環(huán)是否完成。怎么判斷呢,一種是進(jìn)行計(jì)數(shù)與int(math.sqrt(i))+1比較或者非正常結(jié)束打標(biāo)記,但是python有更好的方法。這就要說到第二點(diǎn)。
2、for……else語法,當(dāng)for正常結(jié)束時(shí)執(zhí)行else語句。這就是為什么你把else拿到外面一層結(jié)果正確的原因。

2017年6月25日 03:21
編輯回答
傲嬌范

Python for的語法,執(zhí)行完循環(huán)條件之后,會進(jìn)入else分支執(zhí)行。

for i in range(3):
    print(i)
else:
    print(i)

結(jié)果:
0
1
2
2

2017年7月17日 01:20
編輯回答
款爺

當(dāng)i=51時(shí),內(nèi)層循環(huán):
t=2, 不能整除,你print(i)
t=3, 可以整除,你break
......
實(shí)際上,51不是素?cái)?shù),你只判斷了一次不能被2整除,就print了。正確的做法是:2-8 都不能整除才print。

2017年11月18日 21:52