第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么`a == b或c或d`總是評(píng)估為T(mén)rue?

為什么`a == b或c或d`總是評(píng)估為T(mén)rue?

一只萌萌小番薯 2019-05-23 11:04:32
為什么`a == b或c或d`總是評(píng)估為T(mén)rue?我正在編寫(xiě)一個(gè)拒絕訪問(wèn)未授權(quán)用戶的安全系統(tǒng)。import sysprint("Hello. Please enter your name:")name = sys.stdin.readline().strip()if name == "Kevin" or "Jon" or "Inbar":     print("Access granted.")else:     print("Access denied.")它按預(yù)期授予對(duì)授權(quán)用戶的訪問(wèn)權(quán)限,但它也允許未經(jīng)授權(quán)的用戶訪問(wèn)!Hello. Please enter your name: Bob Access granted.為什么會(huì)這樣?我明確表示,只有在與nameKevin,Jon或Inbar相同時(shí)才授予訪問(wèn)權(quán)限。我也嘗試過(guò)相反的邏輯if "Kevin" or "Jon" or "Inbar" == name,但結(jié)果是一樣的。
查看完整描述

2 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

在許多情況下,Python的外觀和行為與自然英語(yǔ)相似,但這是抽象失敗的一種情況。人們可以使用上下文線索來(lái)確定“Jon”和“Inbar”是加入動(dòng)詞“equals”的對(duì)象,但Python解釋器更具有文字意識(shí)。

if name == "Kevin" or "Jon" or "Inbar":

在邏輯上等同于:

if (name == "Kevin") or ("Jon") or ("Inbar"):

對(duì)于用戶Bob來(lái)說(shuō),相當(dāng)于:

if (False) or ("Jon") or ("Inbar"):

or運(yùn)營(yíng)商選擇以積極的第一個(gè)參數(shù)真值

if ("Jon"):

由于“Jon”具有正的真值,因此該if塊執(zhí)行。這就是導(dǎo)致“授予訪問(wèn)權(quán)限”被打印的原因,無(wú)論給出的名稱(chēng)如何。

所有這些推理也適用于表達(dá)式if "Kevin" or "Jon" or "Inbar" == name。第一個(gè)值為"Kevin"true,因此if塊執(zhí)行。


有兩種常用方法可以正確構(gòu)建此條件。

  1. 使用多個(gè)==運(yùn)算符顯式檢查每個(gè)值:
    if name == "Kevin" or name == "Jon" or name == "Inbar":

  2. 編寫(xiě)一系列有效值,并使用in運(yùn)算符測(cè)試成員資格:
    if name in ("Kevin", "Jon", "Inbar"):

一般來(lái)說(shuō),第二個(gè)應(yīng)該是首選,因?yàn)樗菀组喿x,也更快:

In [1]: name = "Inbar"In [2]: %timeit name == "Kevin" or name == "Jon" or name == "Inbar"10000000 loops, best of 3: 116 ns per loopIn [3]:
 %timeit name in ("Kevin", "Jon", "Inbar")10000000 loops, best of 3: 65.2 ns per loop


查看完整回答
反對(duì) 回復(fù) 2019-05-23
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

簡(jiǎn)單的工程問(wèn)題,讓我們更進(jìn)一步。

In [1]: a,b,c,d=1,2,3,4In [2]: a==bOut[2]: False

但是,繼承自語(yǔ)言C,Python將非零整數(shù)的邏輯值評(píng)估為T(mén)rue。

In [11]: if 3:
    ...:     print ("yey")
    ...:yey

現(xiàn)在,Python構(gòu)建在該邏輯上,并允許您使用邏輯文字,例如或整數(shù),等等

In [9]: False or 3Out[9]: 3

最后

In [4]: a==b or c or dOut[4]: 3

寫(xiě)它的正確方法是:

In [13]: if a in (b,c,d):
    ...:     print('Access granted')

為安全起見(jiàn),我還建議您不要硬編碼密碼。


查看完整回答
反對(duì) 回復(fù) 2019-05-23
  • 2 回答
  • 0 關(guān)注
  • 957 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)