型の変換2

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

問題

変数iに、456.0を整数に変換して代入し、変数sを標準出力に出力せよ。

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

 

実行結果の例

実行結果は以下のようになります。

"456"

回答例

型変換には、型名と同じ組み込み関数を使います。
今回でいうと、整数はint型なので、関数intで変換できます。

i = int(456.0)
print(i)

解説

456.0は少数ですので、float型です。
関数typeを使って、print(type(456.0))で型を確認してみてください。

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

print(type(456.0))
print(type(int(456.0)))

int型等の組み込み型については公式資料に詳しく載っています。
Python3 reference int, float, complex

Python3 reference 組み込み関数int

型の変換

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

SyntaxError: invalid syntax | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > SyntaxError: invalid syntax

Pythonでプログラミングをして動かした時、”SyntaxError: invalid syntax”というエラーが発生して処理が止まってしまうことがあります。このエラーの意味や、このエラーが表示されたときの修正方法を解説します。

SyntaxError: invalid syntax の意味

日本語に直訳すると、「構文 エラー: 不適切な構文」という意味です。 構文 とは、この場合、Pythonの書き方のことです。つまり、このエラーの意味はPythonの書き方が間違っているということです。

書き方が間違っているといっても、このエラーメッセージからは、具体的にどこが間違っているか、分かりません。実は、このエラーが出る間違いは非常に沢山の種類があります。

しかし、このエラーメッセージの全体をよく読むと、 修正方法を見つけるヒントがあります。

エラーメッセージの構造

エラーの全体は下のようになっているはずです。

  File "myfor.py", line 3
    for i in range(0, x)
                       ^
SyntaxError: invalid syntax

“SyntaxError: “~というメッセージの上に、プログラム喉の部分が間違っているか、”^”で示してあります。最初の行には、どのファイルの何行目に間違いがあるかも書いてあります。

上のプログラムだと、myfor.pyというファイル(File “mfor.py”)の3行め(line 3)に間違いがあります。

“^”のある場所を探してみると、for文の最後にあります。これは、必要な”:”(コロン)がないためにエラーが発生しています。
for文の書き方は、” for xxx in xxx xxxx : “という感じなので、forの行の最後に”:”が必要です。

詳しくは下のリンク先をご覧ください。

たくさんのデータで同じ処理を繰り返す

考えられる原因となおし方

上のfor文の”:”不足はあくまでひとつの例です。考えられる原因は他にもたくさんあります。そのうち、初心者がおこしやすいものをいくつか解説します。

for文のinが無い

  File "myfor.py", line 3
    for i  range(0, x):
               ^
SyntaxError: invalid syntax

上の例と同じですが、for文に必要な”in”が無いということです。

ifの”:”が無い

  File "myfor.py", line 3
    if x > 0
           ^

ifにも”:”が必要です。これも忘れてしまうことがあります。

elseの”:”が無い

File "myfor.py", line 5
    else
       ^
SyntaxError: invalid syntax

これも上と似ていますが、elseの”:”(コンマ)は特に忘れやすいです。”:”と最後に付けましょう。

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

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