OJ中提交Python3程式的一些套路
阿新 • • 發佈:2019-02-18
0. FAQ
0.1 提交後提示“答案錯誤”或者“格式錯誤”
PTA檢查答案正確與否是通過字串匹配實現的。所以可能有以下幾種原因:
- 格式錯誤:程式的輸出要與題目中的樣例輸出格式一樣(輸出內容根據執行結果不同而變化),程式輸出的結果多一個空格、少一個空格,都不行。
比如輸出樣例為1 + 2 = 3,你的輸出卻是1+2=3 ,錯誤原因分析:在+
與=
兩邊少了相應的空格,在3
後面卻多了空格。 - 在
input()
中填寫了提示資訊
不要在input中填寫提示資訊!需要獲取輸入的地方只要input()
就可以了。以下程式碼是錯誤的,x = input("請輸入")
,請改為'x = input()' - 你的答案真的錯了(請仔細對比,包括大小寫、空格等)或者題目錯了(小概率)。
0.2 提交後提示"非零返回"
- 程式碼有語法錯誤
針對這種問題,請先在IDLE中把程式除錯好以後再提交。 - 程式碼中多出不必要的input()
多寫了input()
,但卻沒有相應的輸入,就會產生錯誤。比如樣例輸入只要求輸入1行,但程式碼中卻有2個input()
。
0.3 其他要注意的
PTA中的Python3無法正確處理中文字元,所以任何時候,提交的程式碼中都不要出現中文。
新建題時不要在輸入、輸出檔案包含中文。
1.處理輸出
1.1 直接使用print函式
print('你要輸出的內容')
1.2 使用Python中字串的format
函式,比如:
a = 1.111
b = 2.222
print('{} + {} = {:.2f}' .format(a,b,a+b))
輸出:1.111 + 2.222 = 3.33
注1:這裡的{:.2f}
為保留兩位小數。
注2:這裡面的輸出+
與=
兩旁均有空格。
1.3 換行或者不換行
print函式直接換行,如果想不換行要加上end=""
print("1", end="")
print("2", end="")
print("3")
print("4")
輸出:
123
4
另一種處理方式:
line = "a"
line = line + "b" #也可以line.append("b")
line = line + "\r\n" #加一個回車換行
line = line + "cde" #也可以使用line += "cde"
print(line)
輸出:
ab
cde
2.處理輸入
2.1 獲取字串並轉化為數值
在python中統一使用line = input()
來處理輸入,line為輸入的一行字串。
如果想要將其轉換為數值型別,可以使用int,float,eval
函式,比如:
line = input()
x = int(line) #將line轉化為整數型別
y = float(line) #將line轉化為浮點數型別
z = eval(line) #將line轉化為表示式型別並運算
#也可簡寫為如下形式
x = int(input(line))
2.2 獲取多行資料
有如下輸入樣例:
3
10
5
-10
第一行的3代表下面要輸入3行,每行放一個數,如何獲取每行的值呢
n = int(input()) #從第一行獲取`3`這個字串然後轉化為整數賦值給n
for i in range(n): #迴圈n次
x = int(input())
print(x+1)
2.3 如何將字串中以空格或多個空格分割的字串取出來呢?
使用字串的split()
函式
比如輸入1 22 33 5,如何獲得其中的1 22 33 5
這幾個數?例子:
line = input() #使用者輸入"1 22 33 5"
nums = line.split()
print(nums[0],nums[1],nums[2],nums[3])
輸出:1 22 33 5
注意:
現在nums中存放的元素均是字串,如果要進行數值計算必須先轉換。
例題:
從控制檯讀入兩個數,然後將其相加輸出。
輸入:
1 2
輸出:
3
處理方法1:
nums = input().split() #將一行字串中以1個或多個空格分隔的元素取出放入列表。
print(int(nums[0])+int(nums[1])) #int將字元轉化為整數
處理方法2:
ls = [int(x) for x in input().split()] #列表推導式
print(sum(ls))
split
函式還可以指定分隔符,比如要將1,2,3,4,56中以,
分隔的字串取出來?可以使用如下程式碼:
strs = '1,2,3,4,56'.split(",")
print(strs)
2.3 處理不確定行數的輸入
例題:
下面有若干行(具體幾行不確定),每行代表一個整數。
編寫一個程式,將所有的數相加,然後輸出結果。
輸入:
1
2
3
輸出:
6
處理方法
x = 0
while True:
try:
x += int(input())
except:
break
print(x)
如何在IDLE中測試上述程式?
執行程式以後,在每一行輸入對應的數字,按Ctrl+D
結束輸入。
轉自:http://www.cnblogs.com/zhrb/p/7837981.html