pythonwhileeof
㈠ python 怎麼實現類似C語言 while(scanf()!=EOF)的輸入操作
while(scanf()!=EOF)的作用是,當scanf返回EOF時退出循環讀取輸入的操作。
也就是當遇到文件結尾,如果用作標准輸入時就是當在終端輸入了EOF時結束操作。
對於此,python並沒有相同功能的系統函數而是需要由自己判斷。
whileTrue:
try:
s=raw_input()
except:
break
代碼解析:
whileTrue:
s=raw_input()
這個就相當於C的while(1)scanf();
也就是不停的讀輸入,沒有判斷EOF的情況。
在python中,無法通過raw_input()的返回值判斷是否有EOF。python是通過抓取異常來知EOF的,於是,通過try except的方法,當出現except的時候,就是到了EOF,這時退出循環,也就是
except:
break
這樣就達到了和C中同樣的效果。
㈡ python將百分製成績轉換為等級制輸出
1、def main():
score = float(input('請輸入成績: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('對應的等級是:', grade)
if __name__ == '__main__':
main()
2、也可以將五分制構造出一個字元串'EEEEEEDCBAA',用以下方法實現這個功能:
score = int(input())
degree = 'EEEEEEDCBAA'
if (score > 100 or score < 0):
print('Data error!')
else:
print(degree[score//10])
(2)pythonwhileeof擴展閱讀:
1、關於整數的格式化輸出
num01,num02=200,300
print("八進制輸出:0o%o,0o%o"%(num01,num02))。
print("十六進制輸出:0x%x,0x%x"%(num01,num02))。
print("十進制輸出:%d,%d"%(num01,num02))。
print("200的二進制輸出:",bin(num01),"300的二進制輸出為:",bin(num02))。
2、#浮點數輸出
%f 保留小數點後面六位有效數字,%.3f 保留三位小數。
%e 保留小數點後面六位有效數字,指數形式輸出。%.3e 保留3位小數位,使用科學計數法。
%g 保留六位有效數字的前提下,使用小數方式,否則用科學計數法。%3g保留3位有效數字,使用小數或科學計數法。
㈢ python的一個異常EOf Error我不明白是什麼意思,ctrl+d也不太明白怎麼回事
比如說我寫了如下代碼,循環獲取用戶輸入:
1
2
3
4
5
6
7
8
9
10
lst = []
s = 's'
while(True):
try:
s = input('please input:')
lst.append(s)
except Exception as ex:
print(ex)
break
print(lst)
當用戶按ctrl+d的時候就表示停止輸入,python就會顯示EOF異常
㈣ 我編PYTHON的時候遇到了unexpected EOF while parsing錯誤,具體見補充。
一般情況下,我們是這么讀文件的:for line in open("xxx"): print line但是有時候,我們想自己控制讀取每一行,即open得到fp後,readline(),何時是退出呢?經過查找N多文檔,得到一種很隱晦的說法是當返回空串時表示退出。於是寫法是:fp = ....while True: line = fp.readline() if len(line)==0: break #..... Do what you want其實,可以不用len判斷,而用not判斷。Python中,空串的not返回True,即not line時為讀到EOF,如下:fp = ....while True: line = fp.readline() if not line: break #..... Do what you want
㈤ python 怎麼寫通過邏輯指針進行數據切片,找出讀入數據中最新價是偶數的行
對於Perl的一行式perl程序來說,選擇要輸出的、要刪除的、要插入/追加的行是非常容易的事情,因為print/say決定行是否輸出/插入/追加/刪除。雖然簡單,但對於廣泛應用在sed的示例還是可以拿到這里來討論一番。
因為輸出/刪除/插入/追加行都是通過print/say在不同條件下的操作,所以本文只會介紹輸出操作,刪除/插入/追加其實都是同樣的原理。
輸出第一行
$ perl -lne 'print;exit' file.log
輸出第13行
$ perl -ne 'print if $. == 13' file.log
輸出前10行
$ perl -ne 'print if $.<=10' file.log$ perl -ne 'print if 1..10' file.log$ perl -ne '$. <= 10 && print' file.log$ perl -ne 'print; exit if $. == 10' file.log
輸出最後一行
$ perl -ne '$last=$_;END{print $last}' file.log
或者通過文件結尾eof來判斷:
$ perl -ne 'print if eof' file.log
這里的eof函數的作用是:如果下一行讀取到了文件尾部eof,就返回1。否則
輸出倒數10行
這個實現起來可能稍顯復雜,但邏輯很簡單:向一個數組中添加10行元素,如果數組元素個數超過了10,則剔除數組的第一個元素。
$ perl -ne 'push @lines,$_;if(@lines>10){shift @lines;}END{print @lines}' /etc/passwd
這里是shift一個元素來保證"窗口"的穩定性:最多隻有10個元素。另一種穩妥的方式是直接切片,從數組中取最後10個元素:
$ perl -ne 'push @lines,$_;@lines = @lines[@lines-10..$#lines] if @lines>10;END{print @lines}' /etc/passwd
輸出倒數第11行到倒數第2行
有了前一個示例作為基礎,這個需求很容易實現。
保留一個11行元素的數組,最後輸出前10個元素即可。
$ perl -ne 'push @a,$_;shift @a if @a>11;END{print @a[0..$#a-1]}' /etc/passwd
輸出文件的第偶數行
這個很簡單,只需判斷行號的奇偶性即可。
$ perl -ne 'print if $. % 2 == 0' file.log$ perl -ne 'print unless $. % 2' file.log
輸出能匹配的行
$ perl -ne 'print if /regexp/' file.log
輸出兩個匹配之間的行
$ perl -ne 'print if /regexp1/../regexp2/' file.log
輸出匹配行的前一行
只需將每行保留到變數中,如果當前行匹配了,則輸出上一行保存的值。
$ perl -ne '/regexp/ && $last && print $last;$last = $_' file.log
如果想要輸出匹配的前M行,只需把這些數量的行保存到數組中,並不斷地shift剔除就可以。
輸出匹配行的後一行
$ perl -ne '$p && print; $p = /regexp/' file.log
Perl中正則表達式的匹配操作返回的是成功與否的布爾真假,所以$p = /regexp/表示如果匹配了,則$p的值為真,否則為假。
如果$p為真,則下一行將被輸出,且繼續對輸出行進行匹配,如果輸出行仍然能匹配,則繼續輸出下一行。
上面的過程可以改寫成邏輯更為清晰的一行式:
$ perl -ne 'if($p){print;$p=0}++$p if /regexp/' file.log
上面的$p是一個狀態標記變數,如果匹配成功,就標記為真值,並在輸出的時候重置狀態變數。
還可以採用另一種處理邏輯:自己編寫從<>讀取行的while循環,如果匹配了就繼續讀入下一行。因為讀入的下一行可能繼續匹配,所以在while循環中使用redo邏輯回到while循環的開頭。
$ perl -se 'while(<>){if(/$reg/){if(eof){ exit; }print $_ = <>;}redo if /$reg/;}' -- -reg="REGEXP" file.log
輸出匹配行及其後5行
上面採用狀態標記變數$p,這個狀態標記變數可以更深入地使用。
如果匹配了,則$p設置為5,然後輸出後面的行時對$p自減。
$ perl -ne 'if($p){print;$p--}if(/regexp/){$p = 5;print};' file.log
連續行去重
$ perl -ne 'next if "$line" eq "$_";print $line = $_;' file.log
㈥ Python提示SyntaxError: unexpected EOF while parsing 請問我的程序錯在哪裡
a=eval(num[0])下標從0開始