型の変換

Python独学ならTech-Joho TOP > Python問題集 > 型の変換

問題

変数sに、123.0を文字列型に変換して代入せよ。その後、変数sを標準出力に出力せよ。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

下のようになります。

"123.0"

回答例

型変換の方法を知っていますか?

s = str(123.0)
print(s)

解説

単に、123.0と書くとfloat型になります。
print(type(123.0))を実行することで確認できます。

ある型に変換するには、型名と同じ関数を実行すればよいです。
引数に変換元の値を入れます。
今回の問題では、str型への変換なので関数strを使います。

print(type(123.0))
print(type(str(123.0)))

str型については、公式のリファレンスもご覧ください。
Python3 reference 組み込み関数str

ブール演算の戻り値の型

Python独学ならTech-Joho TOP > Python問題集 > ブール演算の戻り値の型

問題

下のコードの<穴埋め>の部分を穴埋めして、
と表示されるようにせよ。

t = type(1 <穴埋め> False)
print(t)

おまけ問題: 同様に、と表示されるようにせよ

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

実行結果は、問題の通り、下記のようになります。

回答例

orやandの演算子の戻り値のルールを知っていれば回答できます。

t = type(1 and False)
print(t)

解説

or演算子は、ブール演算子です。演算子の両側の値の真偽値を評価した時、いずれか1つがTrueであれば真偽値が真の値が戻ります。
しかし、この説明は実は厳密には間違いというか、説明不足です。

実際のorの仕様は、以下のようになっています。
最初にorの左側の値の真偽値を評価し、真であれば左側の値をそのまま返します。bool型のTrue/Falseが返るわけでは無いということです。

しかも、この時右側の式の値は評価されません。
Orの計算の性質上、左が真なら右を調べる必要がないからです。

下のコードを実行してみてください。
右側の式が評価されるなら、”hatena!”と表示されるはずですが、実際は、”OKです”が表示されるだけです。

また、おまけ問題は、右側の値が返るというandの性質を利用シたものになっています。

def hatena():
    print("hatena!")
    return False


print("OKです" or hatena())

andとorについてはリファレンスもご覧ください。
Python3 referenceブール演算

//の計算の戻り値の型

Python独学ならTech-Joho TOP > Python問題集 > //の計算の戻り値の型

問題

変数tに100//3の戻り値の型の名前を代入した後、print(t)を実行せよ

チャレンジ: よけいなカッコやクオーテーションを省いて、型名のみをtに格納せよ。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

回答例

type() 関数を使うと、変数や定数の型名を知ることができます。

t = type(100//3)
print(t)

解説

type()関数は、引数の値の型名を戻り地として返します。
また、//演算子は、わり算の答えの整数部分のみを返します。整数部分だけなので、型はintです。

print(type(100//3))
print(type(100/3))
print(type(100%3))

type()関数及び演算子//については、下記の公式リファレンスを御覧ください。
Python3 reference 2項算術演算

Python3 reference 組み込み関数type

自作の型に+演算子の計算を定義する

Python独学ならTech-Joho TOP > > 自作の型に+演算子の計算を定義する

問題

下のコードを実行するとエラーが発生する。
NewStrを修正して、intとの+演算子の計算を実行すると、両方の値を文字列として結合して返すようにせよ。

class NewStr(str):
    pass

x = NewStr('20')
y = 20
answer = x + y
print(answer)

 

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
  

 

実行結果の例

下のように文字列として結合した結果が戻る

2020

回答例

メソッド__add__を使うと良い。

class NewStr(str):
    def __add__(a, b):
        return str(a) + str(b)

x = NewStr('20')
y = 20
answer = x + y
print(answer)

解説

あるクラスにメソッド__add__があると、”+”演算子の計算が実行されるときに__add__が呼び出されれます。
つまり、__add__は”+”の計算内容を定義します。
これを使って、自作クラスの”+”計算ができるようになります。
下の例は、intを改造した例です。

class NewInt(int):
    def __add__(a, b):
        return int(a) + int(b)

x = NewInt(20)
y = "20"
answer = x + y
print(answer)

下に公式情報があります。
Python3 reference operator

型の名前を取得する

Python独学ならTech-Joho TOP > Python問題集 > 型の名前を取得する

問題

下のコードは未完成です。変数xの型を変数tに代入するように修正したコード全体を答えて下さい。

x = 1999.99
t = // 
print(t)
下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
 

 

実行結果の例

正しく修正すると下のように、クラスの名前が表示されるはずです。

<class 'float'="">

回答例

type関数を使って下のように書きます。

x = 1999.99
t = type(x) 
print(t)

解説

type関数は、

他の型の変数についても表示してみましょう.

type(100)
type(100.0)

Pythonの型(type)については、下記のリンク先が公式の解説です。

Python3 reference type

掛け算の結果を割られた変数に代入する

Python独学ならTech-Joho TOP > Python問題集 > 掛け算の結果を割られた変数に代入する

問題

掛け算をしている行を、複合代入演算子を使って書き換えて下さい。

x = 906
x = x * 216//  # target
print(x)

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

こんな結果になるはずです。

195696

回答例

1つの回答です。

z = 3
x *= 1000
print(x)

解説

ある変数と別の数をかけて、その結果をその変数自身に代入する複合代入演算子*=を使うと簡単にできます。

このように使います。

a = 10
a *= 100
a *= 2
print(a)

複合代入演算子*=の仕様は、公式のリファレンス””Augmented assignment statements にのっています。こちらをご覧ください。

Python3 reference/sum

割り算の結果を割られた変数に代入する

Python独学ならTech-Joho TOP > Python問題集 > 割り算の結果を割られた変数に代入する

問題

下のコードの割り算の行を、演算子を1つしか使わない様に書き換えてください。

div = 337
div = div /  3 # target
print(div)
下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

実行結果の例

divをprintしているので、この様に表示されます。

112.333333333333

回答例

回答例はこのようになります。

div = 337
div  /=  3 # target
print(div)

解説

ある変数を別の数値で割って、その変数自身に代入す複合代入演算子/=を使うと簡単にできます。

下記は別の使い方の例です。

div = 2048
div /= 2
div /= 2
print(div)

複合代入演算子/=の公式仕様は下記のリファレンスAugmented assignment statementsを見てください。

Python3 reference/sum

引き算の結果を引かれた変数に代入する

Python独学ならTech-Joho TOP > Python問題集 > 引き算の結果を自分自身に代入する

問題

下記のコードのtargetというコメントの付いた行を演算子を1つしか使わない行に書き換えて、現状と同じことを実現してください。

x = 1024
x = x - 256 # target
print(x)

この例では、”=”と”-“の2つの演算子が使われています。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
 

 

実行結果の例

この様に表示されます。

768

回答例

例えばこのような回答があります。

x = 1024
x -=  256 # target
print(x)

解説

ある変数から何かを引いてその変数自身に代入する、という処理を簡単にできる複合代入演算子-=が用意されています。

y = 1003
y -= 1
y -= 2
print(y)

複合代入演算子-=の公式仕様は下記のリファレンス””Augmented assignment statementsを見てください。

Python3 reference/sum

ネストしたリストをフラット化する

Python独学ならTech-Joho TOP > Python問題集 > ネストしたリストをフラット化する

問題

下のような2重のリストがあります。

data= [[1,2,3], [4,5,6], [7,8,9]]

これを、[1,2,3,4,5,6,7,8,9]のような1重のリストに変換して、printで表示してください。

(チャレンジ1): 1行で書いてください。
(チャレンジ2): importを使わずに、組み込み関数だけで実現してください。
(チャレンジ3): 2重に限らず、何重にネストしていても使える方法にしてください。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

実行結果の例

この様に表示されます。

[1,2,3,4,5,6,7,8,9]

回答例

例えば、sumを使うと、下のように書くことができます。

 print(sum(data, []))

解説

組み込み関数sumの第2引数を使うと簡単に実現できます。
sumは、第一引数のiterableオブジェクト(リストみたいなやつ)の各要素の合計を計算します。
第2引数は、省略可能な引数で、合計を足す初期値を表します。
もし与えられなければ、0となります。

関数sumの第2引数に空のリスト[]を与えると、[]に第一引数の各要素を足していきます。
そして、リスト同士の和は、その全ての要素を足したリストになります。
下のようなコードを実行してみてください。

これらの機能を使うことで、2重のリストをフラット化することができます。

3重以上にネストしたリストのフラット化については、考えてみてください!

[1, 2, 3] + ["a", "b", "c"]

関数sumの仕様は公式リファレンスに載っています。
Python3 reference/sum
Python3 reference: augmented assignment statements

足した結果を足された変数に代入する(複合代入演算子)

Python独学ならTech-Joho TOP > Python問題集 > 足した結果を自分に代入する(複合代入演算子)

問題

変数xに、xに220を足した値を代入するコードを書いてください。
ただし、xを1度しか書いてはいけません。

下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。
 

 

実行結果の例

結果は表示されません。

なし

回答例

複合代入演算子”+=”を使うと、下のように書くことができます。

x += 220

解説

“+=”という記号は、”+”と”=”をあわせたような機能を持つ演算子です。
左辺に書いた変数に、右辺を足した値を、左辺に書いた変数に代入します。
このような、2つの機能を一度に実現する複合代入演算子の一つです。

例えば、下の2つのコードの機能はほぼ同じになります。

x = x + 99
x += 99

Pythonで利用できる複合代入演算子については、下のリンク先にある公式リファレンスに記載されています。
Python3 reference: augmented assignment statements