8に続いて今回も文字列の扱いについての問題です.
# ITP1_9_A
S = ""
W = input()
while True:
s = input()
if s == "END_OF_TEXT":
break
# 行の最後にスペースを入れないと次の行とつながる
S += s + " "
# 小文字にしてから判定する
S = S.lower()
S_list = S.split(" ")
# 完全一致を探したいのでSのままcountはできない
print(S_list.count(W))
# ITP1_9_B
while True:
s = input()
# 終了条件
if s == "-":
break
n = int(input())
for _ in range(n):
h = int(input())
s = s[h:] + s[:h]
print(s)
あまり嬉しくはないですが,最後にまとめて1回だけスライスでシャッフルすることもできます.
# ITP1_9_B
while True:
s = input()
# 終了条件
if s == "-":
break
n = int(input())
H = 0
for _ in range(n):
H += int(input())
h = H%(len(s))
print(s[h:]+s[:h])
# ITP1_9_C
n = int(input())
taro = 0
hanako = 0
for _ in range(n):
s1,s2 = input().split(" ")
s1 = s1.lower()
s2 = s2.lower()
done = False
for i in range(min(len(s1),len(s2))):
if ord(s1[i]) < ord(s2[i]):
hanako += 3
done = True
break
elif ord(s1[i]) > ord(s2[i]):
taro += 3
done = True
break
# 既に決着がついている場合はこれ以降の判定はしない
if done:
continue
# 最後の文字まで同じだった場合は文字数
if len(s1) < len(s2):
hanako += 3
elif len(s1) > len(s2):
taro += 3
else:
taro += 1
hanako += 1
print(taro,hanako)
# ITP1_9_D
S = input()
n = int(input())
for _ in range(n):
command = input().split(" ")
opp = command[0]
a = int(command[1])
b = int(command[2])+1
if opp == "print":
print(S[a:b])
elif opp == "reverse":
S = S[:a] + "".join(list(reversed(S[a:b]))) + S[b:]
elif opp == "replace":
p = command[3]
S = S[:a] + p + S[b:]
このやり方が思いつかなくても,ループを使って下のように書いても逆順にすることができます.
def str_reverse(S):
new_S = ""
for i in range(len(S)):
new_S += S[len(S)-i-1]
return new_S