文字列の話の一部が終わったので、前回の記事ではこの部分は基礎部分と考えるべきかと思いましたが、実は文字列には苦手な使い方が多いような気がしたので、特別コーナーやってます。
1. 1回しか登場しないキャラクター
res.get(i, False) は、辞書 res 内のキー i の値を検索し、見つかった場合は対応する値を返し、見つからない場合は False を返します。
s=input()
res={
}
for i in s:
if res.get(i,False):
res[i]=res[i]+1
else:
res[i]=1
for i in res:
if res[i]==1:
print(i)
exit()
print("no")
その他: ラウンド(XXX,1)
このコード行の機能は、XXX を小数点第 1 位に四捨五入することです。
大文字と小文字を区別せずに文字列のサイズを比較する
String 使用できるいくつかの関数
str = "www.runoob.com"
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
s1,s2=input().lower(),input().lower()
if s1==s2:
print("=")
elif s1>s2:
print(">")
elif s1<s2:
print("<")
2. 余分なスペースを削除する
書き方1:
print(" ".join(input().split()))
書き方 2:
for s in input().split():
print(s, end = ' ')
3. 情報の暗号化
書き方1:
chr() は、整数を引数として受け取り、その整数に対応する ASCII/Unicode 文字を返す Python 組み込み関数です。
for c in input():
if c >= 'a' and c <= 'z' or c >= 'A' and c <= 'Z':
if ord(c) + 1 == ord('z') + 1 or ord(c) + 1 == ord('Z') + 1:
c = chr(ord(c) - 25)
else:
c = chr(ord(c) + 1)
print(c, end = '')
for c in input():
if c.isalpha():#判断是不是字母
if ord(c) + 1 == ord('z') + 1 or ord(c) + 1 == ord('Z') + 1:
c = chr(ord(c) - 25)
else:
c = chr(ord(c) + 1)
print(c, end = '')
書き方 2:
data = {
}
t = [chr(97+i) for i in range(26)]
for i in range(len(t)-1):
data[t[i]] = t[i+1]
data['z'] = 'a'
# print(data)
res = ''
for i in input():
if data.get(i,False):
res += data[i]
elif data.get(i.lower(),False):
res += data[i.lower()].upper()
else:
res+= i
print(res)
書き方3:独自の書き方
私はコントロールできていますか?ははは
s=input()
for i in s:
if i=="z":i="a"
elif i=='Z':i="A"
elif i.isalpha():
i=chr(ord(i)+1)
print(i,end='')
4. 単語の置換
s,a,b=input(),input(),input()
for t in s.split():
if t==a:
print(b,end=" ")
else: print(t,end=" ")
五、逆さ言葉
書き方1:
l=list(input().split())
l.reverse()
for i in l:
print(i,end=' ')
書き方 2:
*
「*」記号は、リストまたはタプルを解凍して個々の変数に分割するための Python の構文です。ここでは、リスト内のすべての要素が独立した文字列に解凍され、print() 関数に渡されます。
print(*reversed(input().split()))
書き方3:
[::-1]
[::-1] はリストの特殊な構文で、リストを逆順、つまり最後の要素から最初の要素まで、ステップ サイズ -1 で出力するために使用されます。
print(*input().split()[::-1])
6、文字列シフトには問題が含まれています
書き方1:私なりの書き方笑
a,b=input().split()
if len(a)<len(b):
a,b=b,a
s=a+a
if b in s:
print("true")
else:
print("false")
書き方 2:
s, t = input().split()
if len(s) < len(t):
s, t = t, s
for i in range(len(s)):
str = s[i:] + s[:i]
if str.find(t) != -1:
print('true')
break
else:
print('false')
書き方3:
s, t = input().split()
if len(s) < len(t):
s, t = t, s
s *= 2
if s.find(t) == -1:
print('false')
else:
print('true')
セブン、ストリングパワー
これは、繰り返される最小の部分文字列を見つけるためのもので、この部分文字列を複数回繰り返して親文字列を形成できます。
書き方1:
def check(l, s):
p = s[:l]
for i in range(l, len(s), l):
cur = s[i: i + l]
if p != cur:
return False
return True
while 1:
s = input()
if s == '.':
break
l = len(s)
maxl = 1
for curl in range(1, l):
if check(curl, s):
maxl = max(maxl, int(l / curl))
print(maxl)
書き方 2:
最小の文字列は最も多くの繰り返しが含まれる文字列である必要があるため、要件を満たす文字列が見つかる限りループから抜け出すことができます。
while True:
s = input()
if s == '.':
break
n = len(s)
for i in range(1, n + 1):
if n % i == 0:
cs = s[:i]
res = int(n / i)
cs *= res#将求出的字符串和原来的字符串对比,如果是那就说明这个方案可行
if cs == s:
print(res)
break
書き方3:
コレクション輸入カウンターから
各数字が何回出現するかを数えます
from collections import Counter
while True:
s = input()
if s == '.':
break
c = Counter(s)
print(min(c.values()))
8、文字列の最大スパン
書き方1:
s, a, b = map(str, input().split(','))
if s.find(a) != -1 and s.find(b) != -1:
ai = s.find(a) + len(a)
s = s[::-1]
b = b[::-1]
bi = len(s) - s.find(b) - len(b)
if ai <= bi:
print(bi - ai)
else:
print(-1)
else:
print(-1)
書き方 2:
探す
クエリ転送
s,s1,s2 = input().split(",")
a = s.find(s1)
b = s.rfind(s2)
if(a == -1 or b == -1 or a+len(s1) >= b):
print("-1")
else:
print(b-a-len(s1))
9. 最長のパブリック文字列サフィックス
while True:
n = int(input())
if n == 0:
break
ls = []
for i in range(n):
ls.append(input().strip()[::-1])
s1 = min(ls)#获取ls中最小的元素
s2 = max(ls)
res = ''
for i in range(len(s1)):
if s1[i] == s2[i]:
res += s1[i]
else:
break
print(res[::-1])