Range

Python独学ならTech-Joho TOP > Python問題集 > Range

問題

下のコードの # fix hereと書いてある行を修正し、
組み込みクラスrangeを用いて、7の倍数を小さい方から10個表示せよ


for i in range(7, 10): # fix here
    print(i)
下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

7から70までの10個が表示されます。

7
14
21
28
35
42
49
56
63
70

回答例

rangeのコンストラクタをうまく使うと、連続した整数の数列だけでなく、特定の間隔の整数の列をつくることができます。

for i in range(7, 71, 7): # fix here
    print(i)

解説

rangeクラスのコンストラクタの最も典型的な使い方は、整数の引数を2つ指定して、第一引数以上から第二引数未満の数列を作ることです。
作った数列はlistクラスのコンストラクタの引数にして、listに変換することもできます。
For文で特定回数のループを作りたいときには便利です。

実は、rangeクラスのコンストラクタには第三引数を指定することもできます。
第三引数はstep、つまり何個ずつ整数を増やしていくか、を設定します。
ディフォルトは1なので1つずつ数字が増えていきますが、2にすれば1つとばし、3にすれば2つとばし、と飛び飛びの数値の列を作ることができます。
問題では、この機能を使っています。

print(list(range(0, 10))

for number in range(0, 20): # 20回ループさせる
print(number)

for number2 in range(0, 20, 2) # 1つおきに、0から20の手前まで数えてループさせる
print(number2)

Pythonの組み込みクラスrangeについての公式ドキュメントです。
Python3 range

論理積

Python独学ならTech-Joho TOP > Python問題集 > 論理積

問題

下記プログラムの # fix hereというコメントがあるラインを修正し、
ユーザの入力のどちらかが”z”だったら”zがある!”と表示せよ。


str1 =input("z以外を入力")
str2 =input("再度z以外を入力...")
if str1 -str2 == "z" : # fix here
    print("zがある!")
else:
    print("OK") 
下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

1度でもzを入力するとこう表示されます。

zがある!

回答例

orを使ったブール演算をします。

str1 =input("z以外を入力")
str2 =input("再度z以外を入力...")
if str1 == "z" or str2 == "z" : # fix here
    print("zがある!")
else:
    print("OK")

解説

orは両側の値のどちらかが真のときTrueを、それ以外の時Falseを返す式です。

Inputでユーザから受け付けた入力の結果2つをzと比較し、その結果をorの式で判定します。

print(True or False)
print(True or True)

andやor等の論理演算(ブール演算)についての公式ドキュメントです。
Python3 ブール演算

論理和

Python独学ならTech-Joho TOP > Python問題集 > 論理和

問題

下のコードの # fix hereと書いてある行を修正し、
偶数を2回入力したときだけ”OK”と表示されるようにせよ。


a =int( input("偶数を登録して下さい。") )
b =int( input("もう一つ、偶数を登録して下さい。") )
if a + b: # fix here
    print("OK")
else:
    print("違います") 
下の欄に回答を入力し、「回答完了」を押して下さい!回答例が表示されます。

 

実行結果の例

2回とも偶数を入力するとこうなります。

OK

回答例

2つの条件の論理和は and という演算子を使います。

a = input("偶数を登録して下さい。")
b = input("もう一つ、偶数を登録して下さい。")
if a % 2 == 0 and  b %  2 == 0: # fix here
    print("OK")
else:
    print("違います") 

解説

Pythonの変数、定数は、真偽値として評価することができます。
また、2つ以上の真偽値の論理演算をする式があります。
andを使うと論理和を計算することができます。
例えば、xとyが何らかの変数だとして、x and yは、xとyが両方とも真のときTrueを返します。
xとyのどちらか、もしくは両方が偽だとFalseを返します。

print(True and False)
print(True and True)

andやor等の論理演算(ブール演算)についての公式ドキュメントです。
Python3 ブール演算

等号演算子

Python独学ならTech-Joho TOP > Python問題集 > 等号演算子

問題

# fix hereと書いてある行だけを修正して、ユーザが1を入力すると”This is 1″と表示されるようにせよ。

user_input = int(input("整数を入力してください。"))
if user_input  1: # fix here
  print("This is 1")

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

 

 

実行結果の例

ユーザが1を入力すると下のように表示されるようにしてください。

This is 1

回答例

左辺と右辺が等しいことを確かめる演算子は==です。

user_input = int(input("整数を入力してください。"))
if user_input == 1:
  print("This is 1")

解説

“==”は、左辺と右辺が何らかの意味で等しい時にbool型のTrueを等しくないときにFalseを返します。

右辺と左辺が数値の場合、多くの場合、期待通りに動作しますが、数値でない場合の動作については気をつけて下さい。

詳しくは下の公式リファレンスを確認して下さい。

print(1 == 1)
print("1" == 1)

==を始めとした比較のための演算子にについては下のリンク先を御覧ください。
Python3 reference 比較

ある型のみが持つメソッド

Python独学ならTech-Joho TOP > Python問題集 > ある型のみが持つメソッド

問題

“# fix here”と書いてある行だけを修正して、my_listの各要素の中の1の個数を出力するプログラムにせよ。

my_list = ["123456789", 123456789, 123.456789]
for num in my_list:
print(num.count("1")) # fix here

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

 

実行結果の例

実行結果はこのようになるはずです。

1
1
1

回答例

例えば、このような答えの例が考えられます。

my_list = ["123456789", 123456789, 123.456789]
for num in my_list:
print(str(num).count("1")) # fix here

解説

文字列(str型)のcountメソッドは、文字列の中の引数に指定された文字の数を数えるメソッドです。
ちなみに、メソッドとはあるクラスや型が持つ関数です。

このcountメソッドは、int型やfloat型にはありません。
そのため、回答例では、int型やfloat型の要素をstr型に変換しています。

"aabbcc".count("b")
123.count("1") # エラーが発生します。

str型の持つメソッドについて詳しく解説があります。
< a href=”https://docs.python.org/ja/3/library/stdtypes.html#str.count” >Python3 リファレンス str型 countメソッド

int型の数値とstr型の数値

Python独学ならTech-Joho TOP > Python問題集 > int型とstr型

問題

ユーザに数値を入力してもらい、入力された値を256倍した結果を表示したい。
このために、下のプログラムを作成したが、期待通りに動かない。
# fix hereと書いてある行だけを修正して、期待通りに動くようにせよ。

user_input = input("整数を入力してください。")
my_ans = user_input * 256 # fix here
print(my_ans)

チャレンジ: ユーザが数値ではない文字列を入力したときの処理を追加せよ。

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

 

実行結果の例

ユーザが数値、例えば8を入力した時は下のように表示されます。

2048

回答例

ユーザの入力した値をint型に変換しています。

user_input = input("整数を入力してください。")
my_ans = int(user_input) * 256 # fix here
print(my_ans)

解説

乗算演算子*で、掛け算をするには*の両側に変数や定数が整数(int型)か、小数(float型)でなければいけません。

しかし、input関数の戻り値は文字列(str型)です。
問題文のままだと、
*の片方は数値(str型)で、もう一方は整数(int型)なので、文字の繰り返しが実行されてしまいます。

そこで、回答例ではstr型の数値を、int型に変換しています。
Int()という関数の引数に、数値に変換可能な文字列を指定すると、戻り値がint型に変換された結果になります。

Intに限らず、float、strでも、型と同じ名前の関数は、引数をその型に変換する機能を持っています。

print(type("22"))
print(type(float("22"))) # 小数に変換
print(type(int("22"))) # 整数に変換

Pythonにおける乗算(multiplication)演算子の使い方についてはこちらをご覧ください。

Python3 reference *演算子

数値の型の変換については、下のリンク先ページにも参考になる問題があります。
int型とstr型

組み込み関数intの機能についてはこちらもご覧ください。
Python3 reference 組み込み関数int

リストの要素の型

Python独学ならTech-Joho TOP > Python問題集 > リストの要素の型

問題

下のプログラムを実行すると、my_listの各要素をprint関数によって表示する。
ただし、自作のクラスvecについては、そのフィールドの数値が表示されない。


class vec:
def __init__(self, x, y):
self.x = x
self.y = y


my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
print(item)

このプログラムを修正し、my_listの要素のクラス名と内容の数値を整数で表示するようにせよ。
vecの各フィールドはコンマ区切りで表示せよ。

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

実行結果の例

このように表示して下さい。

<class 'int'>: 1
<class 'str'>;: 2
<class 'int'>: 3
<class '__main__.vec'>: 4,5

回答例

これが一つの回答です。

class vec:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return str(self.x) + "," + str(self.y)


my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
if isinstance(item, float):
item = int(item)
print(str(type(item)) + ": " + str(item))

解説

まず、クラス名の取得にはtype()関数を使います。
その戻り値をstr型に変換します。

次に、float型の値をそのまま文字列として表示すると、小数点以下がついてしまいますので、int型に変換します。
float型の判定には、isinstance関数を使います。

最後に、独自の型、vecを文字列に変換したときの内容を自由に設定するために、 __str__関数を定義しています。
2つのフィールド、xとyを”,”で結合しています。


# type関数は変数の型を取得する
print(type(999.9)
# ininstance関数で第一引数が第二引数のインスタンスかどうかを判定できるprint(isinstance(1.9, float))
print(isinstance(2, float))

参考

type()について
Python3 reference type

isinstance()について
Python3 reference isinstance

__str__メソッドについて
Python3 reference object.__str__

文字列と乗算演算子*

Python独学ならTech-Joho TOP > Python問題集 > 文字列と乗算演算子*

問題

下のプログラムは実行するとエラーが発生する。
エラーが出ないように、 fix hereというコメントが付いた行を修正せよ。
実行される処理は、文字列の繰り返しになるようにせよ。


item1 = 9.0 #fix here
item2 = '99'
ans = item1 * item2
print(ans)

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

 

実行結果の例

文字列の繰り返しが実行され99が9回繰り返されます。

999999999999999000

回答例

繰り返すという意味の*演算子には、整数が必要です。

item1 = 9 # fix here
item2 = '99'
ans = item1 * item2
print(ans)

解説

初期状態だと、このようなエラーが発生します。

Traceback (most recent call last):
  File "", line 1, in 
TypeError: can't multiply sequence by non-int of type 'float'

シークエンス(文字列等、何か集まった系のクラス)は、整数(int型)以外の数値での乗算(*)ができませんといっています。

ちなみに、この場合の乗算演算子(*)は、*の右か左の文字列を*の逆側の整数の回数繰り返すという機能をもっています。

これに従い、9.0という小数(float型)と9という整数(int型)に変更しました。

print(type(9.0))
print(type(9))

Pythonにおける乗算(multiplication)演算子の使い方についてはこちらをご覧ください。
Python3 reference *演算子

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

このページでは、Pythonプログラムの実行時にでてくる”TypeError: unsupported operand type(s) for +: ‘int’ and ‘str'”というエラーの意味と、その修正の仕方について説明します。

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ の意味

やや意訳すると、+という計算の記号(演算子)は、int型とstr型の間の計算には使えません、というような意味です。

要は、整数と文字列は+できないということです。

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

エラがーが出る状況は、下のような例が典型的です。PythonのREPL等で、2+’031’を計算しています。

>>> 2 + '031' Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str'

2は整数でint型、’031’は文字列でstr型なので、+で足し算はできません。

これを修正するには、’031’をやめて31という整数で書くか、int(‘031’)として、文字列の’031’をint型に変換します。

関連する練習問題がこちらにあります。

型の変換

int型とstr型

Python独学ならTech-Joho TOP > Python問題集 > int型とstr型

問題

下のプログラムは実行するとエラーが発生する。
fix hereという行だけを修正して、整数同士の足し算が実行されるように、プログラムを変更せよ。

a = 1
b = '11'
ans = a + b # fix here
print(ans)

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

実行結果の例

計算が実行されるはずです。

111

回答例

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

a  = 1
b = '11'
ans = a + int(b) // fix here
print(ans)

解説

発生するエラーはしたのようなものです。

TypeError: unsupported operand type(s) for +: 'int' and 'str'

この意味は、int型とstr型の足し算(+)はできない、つまり整数と文字列の足し算ができないということです。
変数bに代入されたのは文字列で、問題では整数同士の足し算をしたいので、変数bの中身をint型に変換する必要があります。

そのために組み込み関数intでbを整数に変換したものを、aと足すようにしました。

print(type(int('11')))

組み込み関数intの機能についてはこちらもご覧ください。
Python3 reference 組み込み関数int