Problem4
使われている関数の説明がメインです。
問題文
左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
では, 3桁の数の積で表される回文数の最大値を求めよ.
方針
100×100 ~ 999×999 を全て計算し、n = reverse:n となった n をlistに突っ込む。
↓
max関数で最大のものを引っ張ってくる。
解答&解説
def Palindrome_Count (start, stop):
list = []
for a in range (start, stop):
for b in range (start, stop):
if str (a * b) == str (a * b) [::-1] :
list.append (a * b)
return max (list)
print (Palindrome_Count(100, 1000))
for文を2つ使って3桁の数をつくっている。
5行目で回文になっているかを判定させている。[::-1]はスライス関数というものである。(後述)
あとは、回文になっているのをlistに突っ込んで、最大の回文を出力している。
スライス関数
スライス関数を使うとリストや文字列から一部分を選択して値を取得することが可能!
例えば、
list = [0,1,2,3,4,5,6,7,8,9]
print(list[1:7])
print(list[5:9])
str = "0123456789"
print(str[1:7])
print(str[5:9])
[1, 2, 3, 4, 5, 6]
[5, 6, 7, 8]
234567
6789
のように [ start : stop ] で記述される。(range関数のやつと同じ)
listでも文字列でも考え方は同じである。
また、同じということは [ start : stop : step ] とも書くことができる。
list = [0,1,2,3,4,5,6,7,8,9]
print(list[2:10:2])
print(list[10:5:-1])
str = "0123456789"
print(str[2:10:2])
print(str[10:5:-1])
[2, 4, 6, 8]
[9, 8, 7, 6]
2468
9876
そして、次のように値を省略することも可能である。
list = [0,1,2,3,4,5,6,7,8,9]
print(list[4::1])
print(list[:8:2])
print(list[::3])
print(list[5::-1])
print(list[::-1])
str = "0123456789"
print(str[4::1])
print(str[:8:2])
print(str[::3])
print(str[5::-1])
print(str[::-1])
[4, 5, 6, 7, 8, 9]
[0, 2, 4, 6]
[0, 3, 6, 9]
[5, 4, 3, 2, 1, 0]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
456789
0246
0369
543210
9876543210
ちなみに、範囲外の値をスライス関数に入力してもErrorにはならない。
空の値が返ってくるだけだ。
list = [0,1,2,3,4,5,6,7,8,9]
print(list[6:16])
print(list[16:20])
str = "0123456789"
print(str[6:16])
print(str[16:20])
[6, 7, 8, 9]
[]
6789
最後に
投稿期間は空くものだと思います。(必死の言い訳)