日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

詳解Python中的PyInputPlus模塊_python

作者:TANGYRun ? 更新時(shí)間: 2022-07-27 編程語言

“輸入驗(yàn)證”代碼檢查用戶輸入值,在Python中我們用的最多的是input()函數(shù),但是有些情況下反復(fù)使用input()函數(shù)可能會(huì)遺漏某些場(chǎng)景,并且該函數(shù)允許無效輸入通過檢查。因此我們需要使用Python的第三方模塊PyInputPlus進(jìn)行輸入驗(yàn)證。

PyInputPlus包含與input()類似的、用戶多種數(shù)據(jù)(數(shù)字日期、E-mail地址等)的函數(shù)。如果用戶輸入了無效的內(nèi)容,例如格式錯(cuò)誤的日期或超出預(yù)期范圍的數(shù)字,PyIputPlus會(huì)再次提示他們輸入。PyInputPlus還包含其他有用的功能,例如提示用戶的次數(shù)限制和時(shí)間限制(如果要求用戶在時(shí)限內(nèi)作出響應(yīng))。

安裝PyInputPlus

PyInputPlus不是Python標(biāo)準(zhǔn)庫(kù)的一部分,因此需要使用pip單獨(dú)安裝。命令如下:

pip install --user pyinputplus

PyInputPlus具有以下幾種用于不同類型輸入的函數(shù):

inputStr()類似于內(nèi)置的input()函數(shù),但具有一般的PyInputPlus功能inputNum()確保用戶輸入數(shù)字并返回int或float值,這取決于數(shù)字是否包含小數(shù)點(diǎn)inputChoice()確保用戶輸入習(xí)題提供的選項(xiàng)之一inputMenu()與inputChoice類似,但提供一個(gè)帶有數(shù)字或字母選項(xiàng)的菜單inputDatetime()確保用戶輸入日期和時(shí)間inputYesNo()確保用戶輸入“yes”或“no”響應(yīng)inputBool()類似inputYesNo(),但接收“True”或“False”響應(yīng),并返回一個(gè)布爾值inputEmail()確保用戶輸入有效的E-mail地址inputFilepath()確保用戶輸入有效的文件路徑和文件名,并可以選擇檢查是否存在具有該名稱的文件inputPassword()類似于內(nèi)置的input(),但是在用戶輸入時(shí)顯示*字符,因此不會(huì)在屏幕上顯示密碼或者其他敏感信息

只要輸入了無效內(nèi)容,以上函數(shù)就會(huì)自動(dòng)提示用戶:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum()
five
'five' is not a number
10
>>> response
10

每次調(diào)用PyInputPlus模塊的函數(shù)時(shí),import語句中的as pyip代碼讓我們不必輸入pyinputplus,而是可以使用較短的pyip名稱。正如可以將字符串傳遞給input()以提供提示一樣,也可以將字符串傳遞給PyInputPlus模塊的函數(shù)的prompt關(guān)鍵字參數(shù)來顯示提示:

>>> import pyinputplus as pyip
>>> response = pyip.inputInt(prompt='Enter a number')
Enter a number:cat
'cat' is not an Integer.
Enter a number:10
>>> response
10

關(guān)鍵字參數(shù)min、max、greaterThan和lessThan

接收int和float數(shù)的inputNum()、inputInt()和inputFloat()函數(shù)還具有min、max、greaterThan和lessThan關(guān)鍵字參數(shù),用于指定有效值范圍,例如如下例子:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ', min=4)
Enter num: 3
Input must be at minimum:4
Enter num: 4
>>> response
4
>>> response = pyip.inputNum('Enter num: ', greaterThan=4)
Enter num: 4
Input must be greater than 4.
Enter num: 5
>>> response
5
>>> response = pyip.inputNum('Enter num: ', min=4, lessThan=6)
Enter num: 6
Input must be less than 6.
Enter num: 3
Input must be at minimum 4.
Enter num: 4
>>> response
4

關(guān)鍵字參數(shù)blank

在默認(rèn)情況下,除非將blank關(guān)鍵字參數(shù)設(shè)置為True,否則不允許輸入空格字符:

>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ')
Enter num: (blank input entered here)
Blank values are not allowed.
Enter num: 40
>>> response
40
>>> response = pyip.inputNum(blank=True)
(blank input entered here)
>>> response
''

如果想使輸入可選,使用blank=True,這樣用戶不需要輸入任何內(nèi)容。

關(guān)鍵字參數(shù)limit、timeout和default

在默認(rèn)情況下,PyInputPlus模塊的函數(shù)在程序運(yùn)行時(shí)會(huì)一直要求用戶提供有效輸入,如果希望某個(gè)函數(shù)在經(jīng)過一定次數(shù)的嘗試或一定的時(shí)間后停止要求用戶輸入,就可以使用limit和timeout關(guān)鍵字參數(shù)。用limit關(guān)鍵字參數(shù)傳遞一個(gè)整數(shù),以確定PyInputPlus的函數(shù)在放棄之前嘗試接受有效輸入多少次。用timeout關(guān)鍵字參數(shù)傳遞一個(gè)整數(shù),以確定用戶在多少秒之內(nèi)必須提供有效輸入,然后PyInputPlus模塊的函數(shù)會(huì)放棄。

如果用戶未能提供有效輸入,那么這些關(guān)鍵字參數(shù)將分別導(dǎo)致函數(shù)引發(fā)RetryLimitException或TimeoutException異常。

當(dāng)你使用這些關(guān)鍵字參數(shù)并傳入default關(guān)鍵字參數(shù)時(shí),該函數(shù)將返回默認(rèn)值,而不是引發(fā)異常。例如:

response = pyip.inputNum(limit=2, default='N/A')
hello
'hello' is not a number
world
'world' is not a number
>>> response
'N/A'

inputNum()函數(shù)使用了default關(guān)鍵字參數(shù)后不會(huì)引發(fā)RetryLimitException,只會(huì)返回字符串‘N/A’.

關(guān)鍵字參數(shù)allowRegexes和blockRegexes

我們也可以使用正則表達(dá)式指定輸入是否被接受。關(guān)鍵字參數(shù)allowRegexes和blockRegexes利用正則表達(dá)式字符串列表來確定PyInputPlus模塊的函數(shù)將接受或拒絕哪些內(nèi)容作為有效輸入。例如,使用inputNum()函數(shù)將接收羅馬數(shù)字以及常規(guī)數(shù)字作為有效輸入:

import pyinputplus as pyip
>>> response = pyip.inputNum(allowRegexes=[r'(I|V|X|L|C|D|M)+', r'zero'])
XLII
>>> response
'XLII'

我們還可以用blockRegexes關(guān)鍵字參數(shù)指定PyInputPlus模塊的函數(shù)不接收的正則表達(dá)式字符串列表:

import pyinputplus as pyip
>>> response = pyip.inputNum(blockRegexes=[r'[02468]$'])
42
This response is invalid.
43
>>> response
43

如果同時(shí)指定allowRegexes和blockRegexes參數(shù),那么允許列表將優(yōu)先于阻止列表。例如:

import pyinputplus as pyip
>>> response = pyip.inputStr(allowRegexes=[r'caterpillar', 'category'], blockRegexes=[r'cat'])
cat
This response is invalid
catastrophe
This response is invalid
category
>>> response
'category'

將自定義驗(yàn)證函數(shù)傳遞給inputCustom()

可以編寫函數(shù)以執(zhí)行自定義的驗(yàn)證邏輯,并將函數(shù)傳遞給inputCustom()。例如,我們可以創(chuàng)建自己的addsUpToTen()函數(shù),然后將其傳遞給inputCustom()。注意,函數(shù)調(diào)用看起來像inputCustom(addsUpToTen),而不是inputCustom(addsUpToTen()),因?yàn)槲覀兪菍ddsUpToTen()函數(shù)本身傳遞給inputCustom(),而不是調(diào)用addsUpToTen()函數(shù)并傳遞其返回值:

import pyinputplus as pyip
def addsUpToTen(numbers):
    numbersList = list(numbers)
    for i,digit in enumerate(numersList):
        numbersList[i] = int(digit)
    if sum(numbersList) != 10:
        raise Exception('The digits must add up to 10,not %s. ' %(sum(numbersList)))
    return int(number)
>>> response = pyip.inputCustom(addsUpToTen)
123
The digit must add up to 10,not 6.
55
>>> response
55

inputCustom()函數(shù)還支持常規(guī)的PyInputPlus功能,該功能可通過blank、limit、timeout、default、allowRegexes和blockRegexes關(guān)鍵字參數(shù)實(shí)現(xiàn)。

原文鏈接:https://blog.csdn.net/tangya3158613488/article/details/125031264

欄目分類
最近更新