題目描述
來源
OpenJudge網站 —— 百練習題集-第2752號習題
要求
總時間限制: 1000ms 內存限制: 65536kB
描述
給定一組字符串,按指定的排序方式輸出這些字符串。排序可是自然順序(inc)、自然逆序(dec)、忽略大小寫順序(ncinc)、忽略大小寫逆序(ncdec)等。
輸入
輸入有多行,第一行爲一個表明排序方式的字符串見題面,第二行爲字符串的數目。
其餘各行每行一個字符串,字符串中間可能空格,前後也可能有空格,但前後的空格要忽略。
輸出
輸出也有多行,按指定的順序輸出輸入的字符串。
樣例輸入
ncdec
3
Hello World!
You’re right!
haha! you’re wrong!
樣例輸出
You’re right!
Hello World!
haha! you’re wrong!
來源
JP06
解題思路
- 不忽略大小寫排序的做法是,排序方法sort的key參數設置爲: key = None。這也是key參數的默認值。
- 忽略大小寫排序的做法是,排序方法sort的key參數設置爲: key = str.upper。排序的時候,所有參與排序的字符串元素全變成大寫後參與比較。
- 採用升序(inc)排序的做法是,排序方法sort的reverse參數設置爲False,即reverse=False。
- 採用降序(dec)排序的做法是,排序方法sort的reverse參數設置爲True,即reverse=True。
參考答案
order = input().strip()
key_label = None
if order[0] == 'n':
key_label = str.upper #忽略大小寫——全變爲大寫。str.upper是字符串類的upper方法。
reverse_label = False
if "dec" in order:
reverse_label = True #逆序
n = int(input())
lines = [input() for i in range(n)]
lines.sort(key=key_label, reverse=reverse_label)
for s in lines:
print(s)
測試用例
-
題目描述給出的測試用例覆蓋了忽略大小寫降序排序的情形。
-
忽略大小寫降序排序,輸入的字符串的順序與題目描述給出的測試用例不同。
樣例輸入
ncdec
3
Hello World!
haha! you’re wrong!
You’re right!
樣例輸出
You’re right!
Hello World!
haha! you’re wrong! -
不忽略大小寫,降序排序。
樣例輸入
dec
3
Hello World!
You’re right!
haha! you’re wrong!
樣例輸出
haha! you’re wrong!
You’re right!
Hello World! -
不忽略大小寫,升序排序。
樣例輸入
inc
3
Hello World!
You’re right!
haha! you’re wrong!
樣例輸出
Hello World!
You’re right!
haha! you’re wrong! -
忽略大小寫,升序排序。
樣例輸入
ncinc
3
Hello World!
You’re right!
haha! you’re wrong!
樣例輸出
haha! you’re wrong!
Hello World!
You’re right!
小結
- 本題中,四種排序要求通過key參數和reverse參數的設置來落實。
- 學會靈活運用列表的sort方法,包括key參數和reverse參數的用法,能夠應付各種排序要求。