try:
b = 1
while b <= 3 :
a = input()
b = b + 1
except EOFError:
print("hello, " + a)
最後是顯示 NA 20%
通過檢測
您共輸出 0 行。
程式碼是我左拚又拚的弄再一起,我還是搞不懂try,except EOFError是什麼。
這個提示我還不太清楚是什麼意思,可能是我剛學的關係。
提示 :
程式說明:因為系統會賦予數量不一的測試資料來測驗您的程式是否正確,因此必須先以一個 while 迴圈來讀取所有的測試資料。
認真想學習,希望有人可以指點我一下,感恩
這邊簡單說明一下:
try 主要是用來讓你檢測某段程式是否會產生 Error ,
except 則是當對應的 try 有產生 Error 則直接進入 except 執行程式,
(正常來講產生 Error 會直接終止程序(RE), 但有 try/except 做檢測就不會, 要注意的是如果只有單獨的 try 沒有 except 來接收 Error 的話還是會直接終止程序(RE) )
except EOFError 這樣的寫法代表當 Error 是屬於 EOFError(等等再說明) 才進入該 except 並執行,
在講 EOFError 前,
要先了解到事實上 Judge 在做輸入的動作時是從檔案做讀取後再導入輸入的,
因為本題是多筆輸入但我們並不知道有幾筆輸入,
如果放一個迴圈下去一直做輸入就會讀取到 EOF(End of File, 檔案結尾) ,
以 Python 來說當讀取到 EOF 時會拋出 EOFError 來提醒已經到 EOF 了~
所以我們可以使用 try 來檢測是否會產生 EOFError ,
並使用 except EOFError 來接收迴圈已經讀到 EOF 的錯誤,
藉此再執行後續動作或直接結束程式~
以下講一下你程式的問題,
1. 並不需要計數來控制迴圈的次數,
因為題目是多筆數入(題目沒說有幾筆),
這邊猜測你迴圈跑3次的原因是因為「範例測資」有3筆的緣故,
故在此提醒一下「範例測資」並不等於「實際測資」,
因為我們並不知道「實際測資」有幾筆測資,
所以乾脆就直接寫無限迴圈(while 1 :),
反正當讀到 EOF 時會產生 EOFError 而進入 except EOFError ,
這時再結束程式就OK了~
2. 由於 except EOFError 是當 try 產生 EOFError 才會進入的,
所以將 print() 放入 except 並不是對的,
因為這樣只當讀到 EOF 才會進行輸出, (這樣最多就輸出一筆而已)
測資點#0會AC的原因大概是因為測資點#0只有一筆測資吧(?)
測資點#1輸出0行的原因是因為測資點#1不只三筆測資,
所以你的程式並不會讀到 EOF , (你的程式只會輸入三筆)
自然也不會產生 EOFError 也就不會進入 except EOFError 做輸出的動作~
以上希望有幫助到你~ OwO
import sys
for s in sys.stdin:
print('hello, '+s)
本站有使用手冊。
import sys
for s in sys.stdin:
print('hello, '+s)
本站有使用手冊。
感謝兩位的回覆
容許我再問一下
sys.stdin 這個指得是JUDGE這個網頁裡面有程式提供範例輸入得東西事嗎?這樣就不用在另外寫INPUT的意思對嗎?
import sys
for s in sys.stdin:
print('hello, '+s)
本站有使用手冊。
感謝兩位的回覆
容許我再問一下
sys.stdin 這個指得是JUDGE這個網頁裡面有程式提供範例輸入得東西事嗎?這樣就不用在另外寫INPUT的意思對嗎?
stdin是"standard input"
也就是標準輸入的意思(其他程式語言也有)
sys則是python的系統函式庫
基本上我們的程式都是在console(小黑窗)裡運行
sys就代表著系統(即小黑窗環境)
那sys.stdin就是小黑窗裡的輸入啦!
input()函式本身也是一種從小黑窗裡輸入的方法
至於你在網路上看到的應該是下面這段
try:
x = input()
except EOFError:
pass
意思是他會嘗試(try)執行x=input()這個命令
但是因為input()沒辦法用單純的方法告訴你沒有測資了
所以遇到沒測資的情況他就會發生錯誤
而這個錯誤我們稱他為例外(except)
發生錯誤也有很多不同的種類
像是拿數字除以0、把文字轉成數字之類的
input這邊發生的錯誤稱為EOFError(End of File Error)
所以當發生EOFError時
他就不會再執行try裡面的程式碼
改由except進行處理
那我們寫Pass就代表甚麼都不做啦!