#15789: 第一次碰觸PYTHON,請教一下


dean52000@gmail.com (Andy)

學校 : 不指定學校
編號 : 87795
來源 : [220.136.212.138]
最後登入時間 :
2022-09-16 22:49:04
a001. 哈囉 -- Brian Kernighan | From: [36.229.85.110] | 發表日期 : 2018-10-31 21:14

try:
b = 1
while b <= 3 :
a = input()
b = b + 1
except EOFError:
print("hello, " + a)

最後是顯示 NA 20%

通過檢測

#1: 80% WA (line:1)

您共輸出 0 行。

程式碼是我左拚又拚的弄再一起,我還是搞不懂try,except EOFError是什麼。


這個提示我還不太清楚是什麼意思,可能是我剛學的關係。
提示 : 

程式說明:因為系統會賦予數量不一的測試資料來測驗您的程式是否正確,因此必須先以一個 while 迴圈來讀取所有的測試資料。

 

認真想學習,希望有人可以指點我一下,感恩

 
#15796: Re:第一次碰觸PYTHON,請教一下


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a001. 哈囉 -- Brian Kernighan | From: [106.105.27.148] | 發表日期 : 2018-11-01 00:27

這邊簡單說明一下:

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

 

 
#15799: Re:第一次碰觸PYTHON,請教一下


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [1.168.27.172]
最後登入時間 :
2024-04-24 20:07:19
a001. 哈囉 -- Brian Kernighan | From: [111.246.56.236] | 發表日期 : 2018-11-01 11:11

import sys

for s in sys.stdin:

    print('hello, '+s)

 

本站有使用手冊。

 
#15800: Re:第一次碰觸PYTHON,請教一下


dean52000@gmail.com (Andy)

學校 : 不指定學校
編號 : 87795
來源 : [220.136.212.138]
最後登入時間 :
2022-09-16 22:49:04
a001. 哈囉 -- Brian Kernighan | From: [36.229.85.110] | 發表日期 : 2018-11-01 14:46

import sys

for s in sys.stdin:

    print('hello, '+s)

 

本站有使用手冊。



感謝兩位的回覆

容許我再問一下

sys.stdin 這個指得是JUDGE這個網頁裡面有程式提供範例輸入得東西事嗎?這樣就不用在另外寫INPUT的意思對嗎?

 
#16085: Re:第一次碰觸PYTHON,請教一下


a22671512 (夢之旋律)

學校 : 國立新營高級中學
編號 : 53576
來源 : [220.135.123.130]
最後登入時間 :
2024-02-14 21:30:50
a001. 哈囉 -- Brian Kernighan | From: [118.232.124.148] | 發表日期 : 2018-11-18 14:42

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就代表甚麼都不做啦!

 
ZeroJudge Forum