自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
語法參考
sys.stdin是一個標準化輸入對象,可以連續輸入或讀入文件所有內容,不結束,不能直接使用。輸入完成后,再對輸入數據進行處理,這是sys.stdin的強大之處。sys.stdin.readline()方法和sys.stdin.readlines()方法是經常用到的方法,sys.stdin.readline()方法輸入一行,輸完成后自動添加’\n’。sys.stdin.readlines()可以連續輸入數據,此時可以將輸入的數據作為一個整體進行使用。sys.stdin.readline()的基本用法如下:
sys.stdin.readline()
使用sys.stdin.readline()與input()方法都可以實現標準化輸入,但兩者有以下區別:
l??sys.stdin.readline()方法不能填寫提示輸入信息的說明文字,但input()方法在括號內可以直接填寫輸入信息相關的說明文字,如input('請輸入您的名字:')。
l??sys.stdin.readline()方法會在輸入新后加“\n”換行符,而input()方法在輸入完成后不會添加任何內容。要想取消sys.stdin.readline()方法添加的換行符“\n”,可以使用strip('\n')?去除換行符。
下面代碼獲取用戶輸入內容的長度,可以比較一下sys.stdin.readline()和input()輸入內容的區別。代碼如下:
import?sys
line1 = sys.stdin.readline()??#?包含換行符"\n"
line2 = sys.stdin.readline().strip('\n')????#?去掉換行符"\n"
line3 =?input("")?????????????????#?不包含換行符"\n"
print(len(line1),?len(line2),?len(line3))
輸出結果如下:
要輸入多行數據,使用sys.stdin.readlines()方法是最有效的,該方法可以連續輸入多行,輸入完成時,需要回車到空行,然后按ctrl+D輸出結果。應用參見錦囊2。簡單實現多行輸入的代碼如下:
import sys
message = sys.stdin.readlines()
print(message)
用戶連續輸入多行信息,如圖1所示,輸入完成后,回車到空行,然后按ctrl+D輸出結果如圖2所示:
圖1??輸入多行數據
圖2??輸出顯示
????快用錦囊
錦囊1:常規輸入相關內容
sys.stdin.readline()方法不能添加輸入提示說明文字,如果要添加提示說明文字,需要使用print()方法進行輸入信息提示,代碼如下:
import?sys
print('請輸入您的名字: ')
name = sys.stdin.readline()
print('您輸入的名字為: ', name)
程序運行結果如下:
錦囊2:將輸入作為整體進行處理
在批量輸入數據的時候,經常需要輸完數據后在對數據做統一處理,如對數據統一編號、格式處理等,sys.stdin.readlines可以直接將輸入的數據作為整體,輸入完成后再做數據處理,如將用戶輸入的姓名前統一加上3位數字編號,輸入完成時一定要回車,然后按“ctrl +D”輸出程序運行結果。程序代碼如下:
import?sys
index=0?????#??初始化編號
for?line?in?sys.stdin.readlines():????????????#??按行讀取輸入的數據
??? ??line = line.strip()???????????????????????#??去掉空格和換行符
??? ??index=index+1?????????????????????????????#??編號遞進加1
??? ??if?line:??????????????????????????????????#??如果行輸入不為空
?????? ???txt=str(index).zfill(3)+"? "+ line????#?將輸入的數據前加上3位編號
? ????print?(txt)
運行程序,輸入數據,如圖3所示,結束輸入時需要先回車到空行,然后按“ctrl +D”輸出程序運行結果,如圖4所示。
錦囊3:根據兩點坐標計算直線的斜率
在勘探、地理探測工作中,有時需要根據輸入空間的位置計算兩點(x1,y1)(x2,y2)形成直線的斜率,斜率的計算公式為:(y2 - y1) / (x2 - x1),下面編寫一個程序,根據用戶輸入的兩點坐標計算直線斜率k。代碼如下:
import?sys
print('請輸入兩點的4個坐標值,形式為x1 y1 x2 y2,用空格間隔!!')
while True:
????? line = sys.stdin.readline()
??????if?line ==?'\n':?break
??????x1, y1, x2, y2 = (float(x)?for?x?in?line.split())
????? k =?abs(y2 - y1) /?abs(x2 - x1)
??????print('兩點坐標的斜率為:',format(k,'.2f'))
運行程序,輸出結果如圖5所示。
圖5??兩點坐標斜率
也可以直接使用sys.stdin對象輸入數據,然后循環讀取sys.stdin對象的數據。下面使用sys.stdin對象根據兩點坐標計算直線的斜率,代碼如下:
import?sys
print('請輸入兩點的4個坐標值,形式為x1 y1 x2 y2,用空格間隔!!')
for?line?in?sys.stdin:
??????if?line ==?'\n':?break
??????x1, y1, x2, y2 = (float(x)?for?x?in?line.split())
? ????k =?abs(y2 - y1) /?abs(x2 - x1)
??? ??print(?format(k,'.2f'))
錦囊4:利用sys.stdin讀取文件信息
sys.stdin是一個普通文件對象,除了從標準輸入讀取內容以外,也可以使用sys.stdin調用讀取文件信息。如讀取文件”gjqh.txt”的所有國家區號,然后調用readlines函數將前3位為“* 8”的區號輸出出來,實現代碼如下:
import?sys
?? fileName='gjqh.txt'
?? def?readfile(file,ord):?????????????????????#??定義查詢電話區號的函數readfile
?? ????with?open(file)?as?txt:?????????????????#??將國際區號信息文件賦值給變量txt
??? ???????sys.stdin = txt?????????????? ??????#??將變量txt的數據賦值給sys.stdin對象
???? ??????for?line?in??sys.stdin.readlines():???? ??#??按行讀取sys.stdin對象的數據
???????? ???????line=line.strip()???????????????? ??#??去除空格
???? ???????????if?line [0:3]==ord:?????????????????#??按每行數據的前3個字符查詢
??????????? ????????print(line)?????????????????? ??#??輸出查詢結果
??? readfile(fileName,'* 8') ??#??調用readfile(),查詢國際區號前三個字符是?'* 8'的國家或地區
運行程序,輸出效果如圖6所示。
圖6??讀取文件