第2回の練習問題の解答例¶

問題1¶

for文を使って以下の単語を複数形にしなさい。

["boy","girl", "pen","book","dish","watch","box","fox"]

In [ ]:
W = ["boy","girl", "pen","book","dish","watch","box","fox"]

for i in W:
    if i[-1] == "h":
        print(i +"es")
    elif i[-1] == "x":
        print(i + "es")
    else:
        print(i + "s")

問題2¶

inputされた値が3の倍数の場合は"Yes!"、そうでない場合は"No!"と出力するコードを書きなさい。

In [1]:
a = input("Input any number you like:")

a = int(a)

if a %3 == 0:
    print("Yes!")
else:
    print("No!")
Input any number you like:2245111
No!

問題3¶

inputされた英単語が10文字以上の場合は"Long word"と出力されるコードを書きなさい。

In [2]:
a = input("Input any word:")

if len(a) > 9:
    print("Long word")
else:
    print("not long word")
Input any word:encyclopedia
Long word

問題4¶

fizzbuzzです。ルールは以下です。

  1. 1から100までの数字で
  2. 3で割り切れる時には"Fizz!"と表示
  3. 5で割り切れる時には"Buzz!と表示
  4. 3でも5でも割り切れる時には"Fizz! Buzz!"と表示
  5. それ以外の数字はそのまま表示

for文を使って出力してみましょう。

In [3]:
for i in range(1,101):
    if i % 15 == 0:
        print("Fizz! Buzz!")
    elif i % 5 == 0:
        print("Buzz!")
    elif i % 3 == 0:
        print("Fizz!")
    else:
        print(i)
1
2
Fizz!
4
Buzz!
Fizz!
7
8
Fizz!
Buzz!
11
Fizz!
13
14
Fizz! Buzz!
16
17
Fizz!
19
Buzz!
Fizz!
22
23
Fizz!
Buzz!
26
Fizz!
28
29
Fizz! Buzz!
31
32
Fizz!
34
Buzz!
Fizz!
37
38
Fizz!
Buzz!
41
Fizz!
43
44
Fizz! Buzz!
46
47
Fizz!
49
Buzz!
Fizz!
52
53
Fizz!
Buzz!
56
Fizz!
58
59
Fizz! Buzz!
61
62
Fizz!
64
Buzz!
Fizz!
67
68
Fizz!
Buzz!
71
Fizz!
73
74
Fizz! Buzz!
76
77
Fizz!
79
Buzz!
Fizz!
82
83
Fizz!
Buzz!
86
Fizz!
88
89
Fizz! Buzz!
91
92
Fizz!
94
Buzz!
Fizz!
97
98
Fizz!
Buzz!

問題5¶

以下のリスト(L)の各要素を10で割ってリストMに保存しなさい。要素が数値ではない場合、リストMには"X"を追加しなさい。

L = [12,100,90,88,45,"32","25",12,"33",90,100]

In [7]:
L = [12,100,90,88,45,"32","25",12,"33",90,100]

M = []

for i in L:
    if type(i) == str:
        M.append("X")
    else:
        M.append(i)
        
M
Out[7]:
[12, 100, 90, 88, 45, 'X', 'X', 12, 'X', 90, 100]

問題6¶

任意の整数に関して、その値が偶数の場合は2で割り、奇数の場合は3をかけて1を足すという操作を繰り返すと必ず1になります(コラッツの問題)。

例1
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

例2
22 -> 11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

whileとifを用いて任意の整数を入力して、この過程を出力してみましょう。

In [4]:
n = 22

while n != 1:
    if n % 2 == 0:
        n = n/2
        print(n)
    else:
        n = n * 3 + 1
        print(n)
11.0
34.0
17.0
52.0
26.0
13.0
40.0
20.0
10.0
5.0
16.0
8.0
4.0
2.0
1.0

問題7¶

+は前の文字の1文字以上の連続とマッチします。アルファベットの大文字は[A-Z]でマッチします。
以下の文字列からアルファベット大文字1文字で始まり数字が何文字かあり最後にアルファベットが1文字の文字列を取り出しなさい。

N = ["D928333f","S0120000","99","jjjjgk00","jjj","S1022220d","kl201922d","K10230t"]

In [3]:
N = ["D928333f","S0120000","99","jjjjgk00","jjj","S1022220d","kl201922d","K10230t"]

for i in N:
    obj = re.search("[A-Z]\d+[a-z]",i)
    if obj:
        print(i)
D928333f
S1022220d
K10230t

問題8¶

以下のリストから過去形の動詞だけを取り出しなさい。

P = ["edit","worked","prediction","spinned","talked"]

In [10]:
P = ["edit","worked","prediction","spinned","talked"]

for i in P:
    obj = re.search("ed$",i)
    if obj:
        print(i)
worked
spinned
talked

問題9¶

強いパスワードとは以下の条件を満たします。

  1. 8文字以上で、
  2. 数字、大文字、小文字がすべて含まれる。

以下の7つのパスワードが強いパスワードか弱いパスワードかを判定するコードを書きなさい。

PWD = ["12Wxdde17","1234","Pythonbootcamp","ijKKT14379","GreatJourney","apple","abcdefghijk"]

In [11]:
PWD = ["12Wxdde17","1234","Pythonbootcamp","ijKKT14379","GreatJourney","apple","abcdefghijk"]

for i in PWD:
    if len(i) > 8:
        obj1 = re.search("[A-Z]",i)
        obj2 = re.search("[a-z]",i)
        obj3 = re.search("\d",i)
        if obj1 and obj2 and obj3:
            print(i)
12Wxdde17
ijKKT14379