文字列

# formatメソッドの引数の順序の指定

a, b, c = 1, 2, 3
print('a = {}, b = {}, c = {}'.format(a, b, c))
print('b = {1}, c = {2}, a = {0}'.format(a, b, c))
print('b = {kb}, c = {kc}, a = {ka}'.format(ka=a, kb=b, kc=c))

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
a = 1, b = 2, c = 3
b = 2, c = 3, a = 1
b = 2, c = 3, a = 1

# formatメソッドの余白と揃えの指定

print('{:<12}'.format(77))     # 左寄せ
print('{:>12}'.format(77))     # 右寄せ
print('{:^12}'.format(77))     # 中央揃え
print('{:=12}'.format(-77))    # 符号 余白文字 数値
print('{:*<12}'.format(77))    # これ以降、余白文字は'*'
print('{:*>12}'.format(77))
print('{:*^12}'.format(77))
print('{:*=12}'.format(-77))

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py

# formatメソッドの符号の指定

print('{:+} {:-} {: }'.format(77, 77, 77))
print('{:+} {:-} {: }'.format(-77, -77, -77))

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
+77 77 77
-77 -77 -77

# formatメソッドによる各種の指定

print('{:5d}'.format(1234567))
print('{:7d}'.format(1234567))
print('{:9d}'.format(1234567))
print('{:,}'.format(1234567))
print()
print('{:b}'.format(1234567))
print('{0:o} {0:#o}'.format(1234567))
print('{0:x} {0:#X}'.format(1234567))
print()
print('{:%}'.format(35 / 100))
print()
print('{:e}'.format(3.14))
print('{:f}'.format(3.14))
print('{:g}'.format(3.14))
print()
print('{:.7f}'.format(3.14))
print('{:12f}'.format(3.14))
print('{:12.7f}'.format(3.14))
print()
print('{:.0f}'.format(3.0))
print('{:#.0f}'.format(3.0))

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py

# f文字列による書式化の例

a, b, c = 1, 2, 3
print(f'a = {a}, b = {b}, c = {c}')
print(f'{a} + {b} + {c} = {a + b + c}')

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
a = 1, b = 2, c = 3
1 + 2 + 3 = 6

# f文字列による書式化の例(その2)

a, b, c = 1, 2, 3
print(f'{a = }, {b = }, {c = }')
print(f'{a + b + c = }')

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
a = 1, b = 2, c = 3
a + b + c = 6

# 文字列s1とs2の同一性を判定

import sys

s1 = sys.intern(input('文字列s1:'))
s2 = sys.intern(input('文字列s2:'))

print(f's1 is     s2 = {s1 is s2}')
print(f's1 is not s2 = {s1 is not s2}')

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
文字列s1:テスト
文字列s2:試験
s1 is s2 = False
s1 is not s2 = True

# 文字列内の全文字を順に表示(その1)

s = 'ABCDEFG'

print(f's[0] = {s[0]}')
print(f's[1] = {s[1]}')
print(f's[2] = {s[2]}')
print(f's[3] = {s[3]}')
print(f's[4] = {s[4]}')
print(f's[5] = {s[5]}')
print(f's[6] = {s[6]}')

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
s[0] = A
s[1] = B
s[2] = C
s[3] = D
s[4] = E
s[5] = F
s[6] = G

# 文字列内の全文字を順に表示(その1[改])

s = 'ABCDEFG'

print(f's[0] = {s[0]}')
print(f's[1] = {s[1]}')
print(f's[2] = {s[2]}')
print(f's[3] = {s[3]}')
print(f's[4] = {s[4]}')
print(f's[5] = {s[5]}')
print(f's[6] = {s[6]}')
print(f's[6] = {s[7]}')  # エラー

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
s[0] = A
s[1] = B
s[2] = C
s[3] = D
s[4] = E
s[5] = F
s[6] = G
Traceback (most recent call last):
File “C:\xxx.py”, line 12, in
print(f’s[6] = {s[7]}’) # エラー
~^^^
IndexError: string index out of range

# 文字列内の全文字を順に表示(その2)

s = 'ABCDEFG'

print(f's[-7] = {s[-7]}')
print(f's[-6] = {s[-6]}')
print(f's[-5] = {s[-5]}')
print(f's[-4] = {s[-4]}')
print(f's[-3] = {s[-3]}')
print(f's[-2] = {s[-2]}')
print(f's[-1] = {s[-1]}')

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
s[-7] = A
s[-6] = B
s[-5] = C
s[-4] = D
s[-3] = E
s[-2] = F
s[-1] = G

# 文字列内の全文字を順に表示(その2[改])

s = 'ABCDEFG'

print(f's[-7] = {s[-7]}')
print(f's[-6] = {s[-6]}')
print(f's[-5] = {s[-5]}')
print(f's[-4] = {s[-4]}')
print(f's[-3] = {s[-3]}')
print(f's[-2] = {s[-2]}')
print(f's[-1] = {s[-1]}')
print(f's[-8] = {s[-8]}')  # エラー

C:\Users\keieikikaku-02\Downloads\NewMeikaiPython_2nd\chap06>python xxx.py
s[-7] = A
s[-6] = B
s[-5] = C
s[-4] = D
s[-3] = E
s[-2] = F
s[-1] = G
Traceback (most recent call last):
File “C:\xxx.py”, line 12, in
print(f’s[-8] = {s[-8]}’) # エラー
~^^^^
IndexError: string index out of range

# 読み込んだ文字列内の全文字をfor文で走査して表示

s = input('文字列:')

for i in range(len(s)):
    print(f's[{i}] = {s[i]}')

C:>python xxx.py
文字列:テスト
s[0] = テ
s[1] = ス
s[2] = ト

# 読み込んだ文字列内から文字を探索

s = input('文 字 列s:')
c = input('探す文字c:')

print(f'文字{c}は', end='')

for i in range(len(s)):
    if s[i] == c:
        print(f's[{i}]に入っています。')
        break
else:
    print('入っていません。')

C:>python xxx.py
文 字 列s:テスト
探す文字c:ス
文字スはs[1]に入っています。

# 文字列s1とs2の大小関係および等価性を判定

s1 = input('文字列s1:')
s2 = input('文字列s2:')

print(f's1 <  s2 = {s1 <  s2}')
print(f's1 <= s2 = {s1 <= s2}')
print(f's1 >  s2 = {s1 >  s2}')
print(f's1 >= s2 = {s1 >= s2}')
print(f's1 == s2 = {s1 == s2}')
print(f's1 != s2 = {s1 != s2}')

C:>python xxx.py
文字列s1:テストメール
文字列s2:メール
s1 < s2 = True
s1 <= s2 = True
s1 > s2 = False
s1 >= s2 = False
s1 == s2 = False
s1 != s2 = True

# 文字列s1とs2の同一性を判定

s1 = input('文字列s1:')
s2 = input('文字列s2:')

print(f's1 is     s2 = {s1 is s2}')
print(f's1 is not s2 = {s1 is not s2}')

C:>python xxx.py
文字列s1:1qaz2wsx
文字列s2:qa
s1 is s2 = False
s1 is not s2 = True

# 文字列txt内に文字列ptnは含まれているか

txt = input('文字列txt:')
ptn = input('文字列ptn:')

if ptn in txt:
    print('ptnはtxtに含まれています。')
else:
    print('ptnはtxtに含まれていません。')

C:>python xxx.py
文字列txt:1qaz2wsx
文字列ptn:1qaz
ptnはtxtに含まれています。

# 文字列txt内に文字列ptnは含まれているか(別解:not in演算子)

txt = input('文字列txt:')
ptn = input('文字列ptn:')

if ptn not in txt:
    print('ptnはtxtに含まれていません。')
else:
    print('ptnはtxtに含まれています。')

C:>python xxx.py
文字列txt:1qaz2wsx
文字列ptn:2wsx
ptnはtxtに含まれています。

# 文字列内の全文字をenumerate関数で走査して表示

s = input('文字列:')

for i, ch in enumerate(s):
    print(f's[{i}] = {ch}')

C:>python xxx.py
文字列:1qaz2wsx
s[0] = 1
s[1] = q
s[2] = a
s[3] = z
s[4] = 2
s[5] = w
s[6] = s
s[7] = x

# 文字列内の全文字をenumerate関数で走査(1からカウント)

s = input('文字列:')

for i, ch in enumerate(s, 1):
    print(f'{i}番目の文字:{ch}')

C:>python xxx.py
文字列:1qaz2wsx
1番目の文字:1
2番目の文字:q
3番目の文字:a
4番目の文字:z
5番目の文字:2
6番目の文字:w
7番目の文字:s
8番目の文字:x

# 文字列内の全文字をenumerate関数で逆順に走査して表示

s = input('文字列:')

for i, ch in enumerate(reversed(s), 1):
    print(f'後ろから{i}番目の文字:{ch}')

C:>python xxx.py
文字列:1qaz2wsx
後ろから1番目の文字:x
後ろから2番目の文字:s
後ろから3番目の文字:w
後ろから4番目の文字:2
後ろから5番目の文字:z
後ろから6番目の文字:a
後ろから7番目の文字:q
後ろから8番目の文字:1

# 文字列内の全文字を走査して表示

s = input('文字列:')

for ch in s:
    print(ch, end='')
print()

C:>python xxx.py
文字列:1qaz2wsx
1qaz2wsx

# 文字列内の全文字を逆順に走査して表示

s = input('文字列:')

for ch in s[::-1]:
    print(ch, end='')
print()

C:>python xxx.py
文字列:1qaz2wsx
xsw2zaq1

# 文字列内の全文字を逆順に走査して表示(reversed関数を利用)

s = input('文字列:')

for ch in reversed(s):
    print(ch, end='')
print()

C:>python xxx.py
文字列:1qaz2wsx
xsw2zaq1

# 文字列に含まれる文字列を探索

txt = input('文字列txt:')
ptn = input('文字列ptn:')

try:
    print(f'txt[{txt.index(ptn)}]にptnが含まれます。')
except ValueError:
    print('ptnはtxtに含まれません。')

C:>python xxx.py
文字列txt:1qaz2wsx
文字列ptn:1qaz
txt[0]にptnが含まれます。

# 文字列に含まれる文字列を探索

txt = input('文字列txt:')
ptn = input('文字列ptn:')

if (c := txt.count(ptn)) == 0:
    # 含まれない
    print('ptnはtxtに含まれません。')
elif c == 1:
    # 1個だけ含まれる
    print(f'ptnがtxtに含まれるインデックス:{txt.find(ptn)}')
else:
    # 2個以上含まれる
    print(f'ptnがtxtに含まれる先頭インデックス:{txt.find(ptn)}')
    print(f'ptnがtxtに含まれる末尾インデックス:{txt.rfind(ptn)}')

C:>python xxx.py
文字列txt:1qaz2wsx
文字列ptn:1qaz
ptnがtxtに含まれるインデックス:0

# 二つの文字列を一度に読み込む(コンマで区切る)

a, b = input('文字列a,b:').split(',')

print(f'a = {a}')
print(f'b = {b}')

C:>python xxx.py
文字列a,b:1qaz,2wsx
a = 1qaz
b = 2wsx

# 書式化演算子%を用いた書式化

a, b, n = 12, 35, 163
f1, f2 = 3.14, 1.23456789
s1, s2 = 'ABC', 'XYZ'

print('nの10進表記=%d。' % n)
print('nの8進表記=%o。' % n)
print('%dは8進で%oで16進で%x。' % (n, n, n))

print('nは%5dでf1は%9.5fでf2は%9.5fです。' % (n, f1, f2))

print('"%s"+"%s"は"%s"です。' % (s1, s2, s1 + s2))

print('%dと%dの和は%dです。' % (a, b, a + b))

print('%(no1)d+%(no2)dと%(no2)d+%(no1)dはいずれも%(sum)dです。' %
              {'no1': a, 'no2': b, 'sum': a + b})

C:>python xxx.py
nの10進表記=163。
nの8進表記=243。
163は8進で243で16進でa3。
nは 163でf1は 3.14000でf2は 1.23457です。
“ABC”+”XYZ”は”ABCXYZ”です。
12と35の和は47です。
12+35と35+12はいずれも47です。

# 書式化演算子%を用いた書式化(値をキーボードから読み込む)

a = int(input('整数a:'))
b = int(input('整数b:'))
c = int(input('整数c:'))
n = int(input('整数n:'))
f1 = float(input('実数f1:'))
f2 = float(input('実数f2:'))
s1 = input('文字列s1:')
s2 = input('文字列s2:')

print('nの10進表記=%d。' % n)
print('nの8進表記=%o。' % n)
print('%dは8進で%oで16進で%x。' % (n, n, n))

print('nは%5dでf1は%9.5fでf2は%9.5fです。' % (n, f1, f2))

print('"%s"+"%s"は"%s"です。' % (s1, s2, s1 + s2))

print('%dと%dの和は%dです。' % (a, b, a + b))

print('%(no1)d+%(no2)dと%(no2)d+%(no1)dはいずれも%(sum)dです。' %
              {'no1': a, 'no2': b, 'sum': a + b})

C:>python xxx.py
整数a:10
整数b:5
整数c:6
整数n:1
実数f1:5
実数f2:6
文字列s1:1
文字列s2:2
nの10進表記=1。
nの8進表記=1。
1は8進で1で16進で1。
nは 1でf1は 5.00000でf2は 6.00000です。
“1”+”2″は”12″です。
10と5の和は15です。
10+5と5+10はいずれも15です。

# f文字列による書式化(生成した文字列を表示)

a = int(input('整数a:'))
b = int(input('整数b:'))
c = int(input('整数c:'))
n = int(input('整数n:'))
f1 = float(input('実数f1:'))
f2 = float(input('実数f2:'))
s = input('文字列s:')
print()
print(f'a / b = {a / b}')
print(f'a % b = {a % b}')
print(f'a // b = {a // b}')
print(f'bはaの{a / b:%}')        # 百分率
print()
print(f'     a    b    c')       # 正 負
print(f'[+]{a:+5}{b:+5}{c:+5}')  # '+' '-'
print(f'[-]{a:-5}{b:-5}{c:-5}')  #   '-'
print(f'[ ]{a: 5}{b: 5}{c: 5}')  # ' ' '-'
print()
print(f'{c:<12}')       # 左寄せ
print(f'{c:>12}')       # 右寄せ
print(f'{c:^12}')       # 中央揃え
print(f'{c:=12}')       # 符号の後ろに余白文字
print()
print(f'n = {n:4}')     # 少なくとも4桁
print(f'n = {n:6}')     # 少なくとも6桁
print(f'n = {n:8}')     # 少なくとも8桁
print(f'n = {n:,}')     # 3桁ごとに,
print()
print(f'n = ({n:b})2')  # 2進数
print(f'n = ({n:o})8')  # 8進数
print(f'n = ({n})10')   # 10進数
print(f'n = ({n:x})16') # 16進数(小文字)
print(f'n = ({n:X})16') # 16進数(大文字)
print()
print(f'f1 = {f1:e}')   # 指数形式
print(f'f1 = {f1:f}')   # 固定小数点形式
print(f'f1 = {f1:g}')   # 形式を自動判別
print()
print(f'f1 = {f1:.7f}')    # 精度は7
print(f'f1 = {f1:12f}')    # 全体で12
print(f'f1 = {f1:12.7f}')  # 全体で12+精度は7
print()
print(f'f2 = {f2:.0f}')    # 小数部がなければ省略
print(f'f2 = {f2:#.0f}')   # 小数部がなくても小数点
print()
print(f'{s:*<12}')      # 左寄せ
print(f'{s:*>12}')      # 右寄せ
print(f'{s:*^12}')      # 中央揃え
print()

for i in range(65, 91):   # 65~90の文字
    print(f'{i:c}', end='')
print()

C:>python xxx.py
整数a:11
整数b:6
整数c:8
整数n:4
実数f1:2
実数f2:1
文字列s:6

a / b = 1.8333333333333333
a % b = 5
a // b = 1
bはaの183.333333%

 a    b    c
[+] +11 +6 +8
[-] 11 6 8
[ ] 11 6 8

8
8
8
8

n = 4
n = 4
n = 4
n = 4

n = (100)2
n = (4)8
n = (4)10
n = (4)16
n = (4)16

f1 = 2.000000e+00
f1 = 2.000000
f1 = 2

f1 = 2.0000000
f1 = 2.000000
f1 = 2.0000000

f2 = 1
f2 = 1.

6***********
***********6
*****6******

ABCDEFGHIJKLMNOPQRSTUVWXYZ

# 読み込んだ文字はアルファベットの何番目か

from string import *

c = input('アルファベット:')

if (idx := ascii_lowercase.find(c)) != -1:
    print(f'小文字の{idx + 1}番目です。')
else:
    idx = ascii_uppercase.find(c)
    if idx != -1:
        print(f'大文字の{idx + 1}番目です。')
    else:
        print(f'アルファベットではありません。')

C:>python xxx.py
アルファベット:f
小文字の6番目です。

# f文字列による文字列の連結

s1 = input('文字列s1:')
s2 = input('文字列s2:')
no = int(input('整数値no:'))

print(f'{s1}{s2}')          # 文字列s1 + 文字列s2
print(f'{s1}{no}{s2}')      # 文字列s1 + 整数no + 文字列s2

C:>python xxx.py
文字列s1:pdf
文字列s2:abc
整数値no:1
pdfabc
pdf1abc

# 書式化演算子%を用いた書式化の例

print('%3d' % 12345)
print('%5d' % 12345)
print('%7d' % 12345)
print()
print('%d / %d = %d' %  (5, 3, 5 / 3))
print('%d %% %d = %d' % (5, 3, 5 % 3))
print()
print('%d %o %x' % (12345, 12345, 12345))
print('%e %f %g' % (1.234, 1.234, 1.234))

C:>python xxx.py
12345
12345
12345

5 / 3 = 1
5 % 3 = 2

12345 30071 3039
1.234000e+00 1.234000 1.234

# スライス式の利用例

s = 'ABCDEFGHIJKLMNOPQRSTUVWZYZ'
print(f's[:]    = {s[:]}')
print(f's[:7]   = {s[:7]}')
print(f's[5:]   = {s[5:]}')
print(f's[5:11] = {s[5:11]}')
print(f's[-5:]  = {s[-5:]}')
print(f's[::3]  = {s[::3]}')
print(f's[::-1] = {s[::-1]}')

C:>python xxx.py
s[:] = ABCDEFGHIJKLMNOPQRSTUVWZYZ
s[:7] = ABCDEFG
s[5:] = FGHIJKLMNOPQRSTUVWZYZ
s[5:11] = FGHIJK
s[-5:] = VWZYZ
s[::3] = ADGJMPSVY
s[::-1] = ZYZWVUTSRQPONMLKJIHGFEDCBA

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。