AOJの プログラミング入門 トピック8にチャレンジしました。
トピック8 文字
トピック8は文字に関する問題4問でした。
8_A:Toggling Cases
入力されたデータを大文字なら小文字に、小文字なら大文字に変換する問題です。
swapcase()関数を使用すると、文字列の大文字小文字を反転してくれます。
in_data = str(input())
print(in_data.swapcase())
8_B:Sum of Numbers
入力値の合計を出力する問題です。
文字列として入力データを受取り、文字列の長さ分だけfor文で回して加算しました。
while True:
in_data = str(input())
if in_data == '0' :
break
else :
out_data = 0
for iii in range(len(in_data)):
out_data = out_data + int(in_data[iii])
print(out_data)
out_data = 0
8_C:Counting Charactors
文章を読み込んでaからzまでの文字に分解してそれぞれのカウント値を返す問題です。
「言語解説」を見るとtry-exceptによる例外処理の記述例がありましたので、こちらを参考にEOF(EndOfFile:ファイルの終わり)になるとexcept処理を行う記述を取り入れてみました。
while True :
try:
str = input()
list_a.append(str)
except EOFError :
break
aからzまでのアスキーコードは97から122です。
AからZまでのアスキーコードは65から90です。
出力はaからzの小文字で表記なので、出力用にlist_cを作成しアルファベットを代入しました。
for iii in range(97,123):
list_c.append(chr(iii))
list_aのリストデータを一文字単位でばらしてlist_bに代入し、
その取り出した一文字をordで文字列からアスキーコードに変換し、
アルファベットカウント用のlist_dに代入するとPASSできました。
list_a =
list_b =
list_c =[]
list_d =[0 for i in range(26)]
for iii in range(97,123):
list_c.append(chr(iii))
while True :
try:
str = input()
list_a.append(str)
except EOFError :
break
for iii in range(len(list_a)):
for kkk in range(len(list_a[iii])):
data1 = list_a[iii][kkk]
list_b.append(data1)
for jjj in range(len(list_b)):
mmm = ord(list_b[jjj]) - ord('A')
if mmm >= 0 and mmm < 26 :
list_d[mmm]+=1
mmm = ord(list_b[jjj]) - ord('a')
if mmm >= 0 and mmm < 26 :
list_d[mmm]+=1
for iii in range(26):
print(list_c[iii],":",list_d[iii])
8_D:Ring
1行目に文字列s、2行目に文字列pが与えられ、文字列sの文字を使って文字列pが作れるかを見つけ出す問題です。
if 分の in を使用すれば文字列がそこに含まれているかわかります。
例えば以下の場合、sの中にpが含まれていればYesをかえします。
abcはabcdに含まれているのでYesとなります。
問題はリストがリングになっている場合も想定しないといけないので、
sの配列を2つ続けてその中にあるかどうかを判定しました。
s = input()
p = input()
s +=s
if p in s :
print("Yes")
else:
print("No")