1 四則演算・変数・データ型
①
display.scroll(5+2)
display.scroll(5-2)
display.scroll(5*2)
display.scroll(5/2)
display.scroll(5//2)
display.scroll(5%2)
display.scroll(5**2)
[7 ]
[3 ]
[10 ]
[2.5 ]
[2 ]
[1 ]
[25 ]
②
display.scroll(3/2/2)
display.scroll(3//2//2)
display.scroll(3%2%2)
[0.75 ]
[0 ]
[1 ]
③
display.scroll(2*3*2)
display.scroll(2**3*2)
display.scroll(2*3**2)
display.scroll(2**3**2)
[12 ]
[16 ]
[18 ]
[512 ]
④
display.scroll((7-5)/2-3*(6-4))
[-5.0 ]
⑤
display.scroll(13%(7-5)*3)
display.scroll(13%(7-5)**3)
[3 ]
[5 ]
⑥
実行結果を求めよ。
num = 5
city = 'Nakano'
display.scroll(num)
display.scroll(city)
display.scroll('num')
display.scroll('city')
[5 ]
[Nakano ]
[num ]
[city ]
⑦
実行結果を求めよ。
one = 1
One = '1'
display.scroll(one + one + one)
display.scroll(One + One + One)
[3 ]
[111 ]
⑧
実行結果を求めよ。
a = 0
a = a + 1
a = a + 1
a = a + 1
display.scroll(a)
[3 ]
⑨
実行結果を求めよ。
a = 4
b = 7
display.scroll(a)
display.scroll(b)
x = a
a = b
b = x
display.scroll(a)
display.scroll(b)
[4 ]
[7 ]
[7 ]
[4 ]
表示
消去
2 配列(リスト)
①
実行結果を求めよ。
Name = ["SUZUKI","WATANABE","SATO","TANAKA"]
Club = ['baseball','soccer','tennis','judo']
Height = [173,165,178,162]
num = 2
display.scroll(Name[num]+Club[num]+str(Height[num]))
[SATOtennis178 ]
②
実行結果を求めよ。
Eto=['Ne', 'Ushi', 'Tora', 'U', 'Tatsu', 'Mi']
Index = [4, 0, 2, 5, 1, 3]
display.scroll(Eto[Index[1]])
display.scroll(Eto[Index[3]])
display.scroll(Eto[Index[0]])
[Ne Mi Tatsu ]
③
実行結果を求めよ。
N = ['ko','se','i','ga','ku','e','n']
K = [4, 0, 3, 1, 6, 2]
display.scroll(N[K[2]])
display.scroll(N[K[5]])
display.scroll(N[K[1]])
display.scroll(N[K[0]])
display.scroll(N[K[3]])
display.scroll(N[K[4]])
[ga i ko ku se n ]
④
実行結果は「49 30」となった。空欄 [ ] に適当な数字を入れよ。
Num=[1, 7, 3, 2, 0, 5]
a1 = Num[ 1 ] ** Num[ 3 ]
a2 = Num[ 5 ] * (Num[ 1 ] - Num[ 0 ])
display.scroll(a1)
display.scroll(a2)
表示
消去
3 if 文(選択構造)
①
下のプログラムで,
● で与える点数が 78, 42 のとき,
実行結果はそれぞれ何と表示されるか。
point =
●
if point >= 60:
display.scroll('Pass')
else:
display.scroll('Fail')
[Pass, Fail ]
②
下のプログラムが,上の問題①と同じ動作をする(等価)ように,
空欄に適当なコードを入れよ。
point =
●
comment = 'Pass'
if point < 60:
comment = 'Fail'
display.scroll(comment)
③
下のプログラムで,
● で与える時間が 148, 173 , 215 のとき,
実行結果はそれぞれ何と表示されるか。
second =
●
comment = 'Good'
if second > 200:
comment = 'Yawa'
if second < 160:
comment = 'Kata'
display.scroll(comment)
[Kata, Good, Yawa ]
④
下のプログラムが,上の問題③と等価になるように,
空欄に適当なコードを入れよ。
second =
●
if second > 200:
comment = 'Yawa'
elif
second >= 160 :
comment = 'Good'
else:
comment = 'Kata'
display.scroll(comment)
⑤
信号が 「 Blue:50%, Yellow:10%, Red:40% 」 の確率で表示されるようにしたい。
空欄に適当なコードを入れよ。
import random
Signal = ['Blue','Yellow','Red']
prob = random.random() # 0.0 以上 1.0 未満の乱数を発生
if
prob < 0.5 :
index = 0
elif
prob < 0.6 :
index = 1
else:
index = 2
display.scroll(Signal[index])
表示
消去
4 while・for 文(反復構造)
①
実行結果を求めよ。
sum = 0
for i in range(10):
sum = sum + i
display.scroll(sum)
[45 ]
②
実行結果を求めよ。
for n in range(1, 7):
square = n * n
display.scroll(square)
[1 4 9 16 25 36 ]
③
実行結果を求めよ。
sum = 0
for i in range(2, 14, 3):
sum = sum + i
display.screen(sum)
[26 ]
④
次の各プログラムの実行結果を求めよ。
fact = 1
for i in range(4, 13, 3):
fact = fact * i
display.screen(fact)
fact = 1
for i in range(13, 4, -3):
fact = fact * i
display.screen(fact)
[280 ]
[910 ]
⑤
次の各プログラムの実行結果を求めよ。
i = 1
while i < 5:
display.scroll(i)
i = i + 1
display.scroll('afterloop'+str(i))
i = 5
while i > 0:
display.scroll(i)
i = i − 1
display.scroll('afterloop'+str(i))
[1 2 3 4 afterloop5 ]
[5 4 3 2 1 afterloop0 ]
⑥
次の各プログラムの実行結果を求めよ。
sum = 0
i = 1
while True:
sum = sum + i
i = i + 1
if i > 10:
break
display.screen(sum)
display.screen('afterloop '+str(i))
sum = 0
i = 10
status = 1
while status > 0:
i = i − 1
sum = sum + i
if i < 1:
status = 0
display.screen(sum)
display.screen('afterloop '+str(i))
[55 afterloop 11 ]
[45 afterloop 0 ]
⑦
和 1+2+3+・・・+n を考える。
和がはじめて 10000 以上になったときの和の値とそのときの n の値を求めたい。
作成した下の2通りのプログラムで,空欄を適当なコードで埋めよ。
n = 0
sum = 0
while sum < 10000 :
n = n + 1
sum = sum + n
display.scroll(n)
display.scroll(sum)
n = 0
sum = 0
while True:
n = n + 1
sum = sum + n
if sum >= 10000 :
break
display.scroll(n)
display.scroll(sum)
⑧
下のプログラムは,
● で与えられた整数の階乗を求めるものである。
作成した下の2通りのプログラムで,空欄を適当なコードで埋めよ。
n = ●
m = n
fact = 1
while m >= 1 :
fact = fact * m
m = m − 1
display.scroll(str(n)+'!='+str(fact))
n = ●
m = 1
fact = 1
flag = True
while flag:
fact = fact * m
m = m + 1
if m > n :
flag = False
display.scroll(str(n)+'! = '+str(fact))
# 出力例 ⇒ 「0!=1」「3!=6」「5!=120」「10!=3628800」
⑨
実行結果を求めよ。
Point = [0,1,2,3,4,5,6,7,8,9,10] #得点
Seito = [0,0,1,2,4,3,7,6,4,2,1] #人数
psum = 0
ssum = 0
for i in range(11):
psum = psum + Point[i] * Seito[i]
ssum = ssum + Seito[i]
average = psum / ssum
display.scroll(average)
[6.1 ]
⑩
実行結果を求めよ。
Code = ['l', 'i', 's', 't', 'e', 'n']
Key = [2,1,0,4,5,3]
anagram = ''
for i in range(6):
anagram = anagram + Code[Key[i]]
display.scroll(anagram)
[silent ]
⑪
サイコロを10000回振って各目の出た回数を配列Diceの各要素で記録する。
配列Diceの添字はサイコロの目の数より一つ下となるように対応させる。
例えば,1の目の回数はDice[0]で,6の目の回数はDice[5]で記録する。
結果は実行する度に変わるが,そのうちのひとつは下のようなものであった。
1699 1627 1719 1668 1615 1672
下のプログラムの空欄に,適当なコードを入れよ。
import random
Dice = [0,0,0,0,0,0]
for i in range(
10000 ):
number = random.randint(1,6)
Dice[ number-1 ] = Dice[number-1] + 1
for i in range(
6 ):
display.scroll(
Dice[i] )
⑫
同じ実験を繰り返し 10 回の測定データを得た。考察ではデータを 1,3,5,7,9 回目と2,4,6,8,10 回目とに分け,それぞれの平均を求めて比較検討することとした。下の空欄に適当なコードを入れよ。
Data = [5.2, 5.1, 5.6, 5.4, 5.3, 5.0, 5.2, 5.3, 5.4, 5.1]
# 1,3,5,7,9 回目
sum1 = 0
num1 =
0
for i in range(0,10 , 2 ):
sum1 = sum1 + Data[i]
num1 =
num1 + 1
display.scroll(sum1/num1)
# 2,4,6,8,10 回目
sum2 = 0
num2 = 0
for i in range(
1, 10, 2 ):
sum2 = sum2 + Data[i]
num2 = num2 + 1
display.scroll(sum2/num2)
# 実行結果:5.34 5.18
⑬
日本では,硬貨として 1,5,10,50,100,500 円の 6 種が用意されている。
1000 円未満の金額を,硬貨の枚数を最も少なくしてピッタリ支払うためには,それぞれの硬貨を何枚ずつ用意すれば良いだろうか。
そこで,これを求めるプログラムを作成した。空欄に適当なコードを入れよ。
money = ●
Coin = [1,5,10,50,100,500]
Maisu = [0,0,0,0,0,0]
mny = money
for i in range(6):
j = 5 - i
Maisu[j] = mny // Coin[j]
mny = mny % Coin[j]
for i in range(6):
display.scroll(Coin[i])
display.scroll('円硬貨:')
display.scroll(Maisu[i])
display.scroll('枚')
# Coin と Maisu の各要素は順に対応
# 金額の大きい順から算出
参考)
for i in range(5,-1,-1): とすると
i = 5,4,3,2,1,0 となる。
# 出力例 ● = 867 のとき ⇒
1円硬貨:2枚 5円硬貨:1枚 10円硬貨:1枚 50円硬貨:1枚 100円硬貨:3枚 500円硬貨:1枚
⑭
a
1 = 0 , a
2 = 1 , a
n +2 = a
n + a
n +1 ( n ≧ 1 )
で定義されるフィボナッチ数列について,それぞれ # 行のコメントアウトで指示されたような各項を表示したい。空欄 に適当なコードを入れなさい。
#初項から第10項まで
a1=0
a2=1
display.screen(a1)
display.screen(a2)
for i in range( 8 ):
a3=a1+a2
display.screen(a3)
a1=a2
a2=a3
#初項から順に100以下の項
a1=0
a2=1
display.screen(a1)
display.screen(a2)
while True:
a3=a1+a2
if a3>100 :
break
display.screen(a3)
a1=a2
a2=a3
# 出力 ⇒ 0 1 1 2 3 5 8 13 21 34
# 出力 ⇒ 0 1 1 2 3 5 8 13 21 34 55 89
⑮
アルファベットの A~H がリング状に並んだスゴロクがある。このスゴロクでは,A から出発しサイコロを 1 個1 回振って出た目の数だけアルファベットの順方向に進み,止まったときにその文字を記録してさらに続けて先に進む。H を過ぎると元のA に戻るがそのまま通過して進む。
例えば,サイコロを3回振って順に「3」「1」「5」と出たとすると,まず「3」で「D」に,次に「1」で「E」に,そして「5」でHを通過し「B」に止まることになる。このときの止まった記録は,「D」「E」「B」に1回ずつということになる。
さてサイコロを連続して10000回振ったとき,最も多く止まる場所はどこだろうか。これをコンピュータに乱数を発生させ実験させ明らかにしてみよう。
下にそのプログラムを示す。空欄に適当なコードを入れなさい。
import random
Alph = ['A','B','C','D','E','F','G','H']
Dosu = [0, 0, 0, 0, 0, 0, 0, 0]
ichi = 0
kaisu = 10000
for i in range( kaisu ):
dice = random.randint(1,6)
ichi = (ichi + dice) % 8
Dosu[ ichi ] = Dosu[ichi] + 1
for i in range( 8 ):
display.scroll(Alph[i]+':')
display.scroll(Dosu[i])
# 止まった位置
# Alphと添字が一致する位置の停止度数
# 停止位置の添字,初期値は'A'の「0」
# サイコロを振る最大の回数
# 出力例 ⇒
A:1233 B:1218 C:1243 D:1267 E:1250 F:1268 G:1261 H:1260
表示
消去
5 ネスト
①
実行結果を求めよ。
Group1 = ['A', 'B', 'C']
Group2 = ['X', 'Y']
for g1 in range(3):
for g2 in range(2):
display.scroll(Group1[g1] + ':' + Group2[g2])
[A:X A:Y B:X B:Y C:X C:Y ]
②
実行結果を求めよ。
sum = 0
for i in range(1,4):
for j in range(1,4):
sum = sum + i * j
display.scroll(sum)
[36 ]
③
実行結果を求めよ。
for x in range(10):
y = x ** 3 - 10 * x ** 2 + 27 * x - 18
if y == 0:
display.scroll(x)
# y=((x-10)*x+27)*x-18 と記述されることもある。
[1 3 6 ]
④
実行結果を求めよ。
Num = [3, -2.6, -70, 0.05]
for i in range(4):
n = Num[i]
if n < 0:
n = -1 * n
display.scroll(n)
[3 2.6 70 0.05 ]
⑤
実行結果を求めよ。
Array = [1, 3, 5]
for i in range(3):
n = Array[ i ]
if n != 3:
n = n + 1
n = n - 1
display.scroll( n )
[1 2 5 ]
⑥
実行結果を求めよ。
Num = [2, 5, 0, 7, 4, 9, 6]
max = Num[0]
for i in range(1,7):
if Num[i] > max:
max = Num[i]
display.scroll(max)
[9 ]
⑦
実行結果を求めよ。
Num = [3, 1, 4]
for i in range(3):
if Num[i] % 2 == 0:
judg = 'even'
else:
judg = 'odd'
display.scroll(judg)
[odd odd even ]
⑧
等式 4 m + 3 n = 60 を満たす 0 以上の整数の組を求めたい。
明らかに 0≦m≦15, 0≦n≦20 であることに留意して,
空欄に適当なコードを入れよ。
count =
0
for m in range( 16 ):
for n in range(
21 ):
k = 4 * m + 3 * n
if
k == 60 :
display.scroll('('+str(m)+','+str(n)+')')
count =
count + 1
display.scroll(str(count)+' pairs')
# (0,20) (3,16) (6,12) (9,8) (12,4) (15,0) 6 pairs と表示される。
⑨
実行結果を求めよ。
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
eval = 'Failed'
if Point[i] >= 40:
eval = 'Pass'
if Point[i] >= 80:
eval = 'Excellent'
display.scroll(Seito[i]+':'+eval)
[Saito:Pass Yamada:Failed Suzuki:Excellent ]
⑩
上の問題 ⑨ と等価なプログラムを 8 本作った。空欄に適当なコードを入れよ。
[コードA]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
eval = 'Excellent'
if Point[i] < 80 :
eval = 'Pass'
if Point[i] < 40 :
eval = 'Failed'
display.scroll(Seito[i]+':'+eval)
[コードB]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
eval = 'Pass'
if Point[i] < 40 :
eval = 'Failed'
if Point[i] >= 80 :
eval = 'Excellent'
display.scroll(Seito[i]+':'+eval)
[コードC]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] < 40 :
eval = 'Failed'
elif Point[i] < 80 :
eval = 'Pass'
else:
eval = 'Excellent'
display.scroll(Seito[i]+':'+eval)
[コードD]
eito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] >= 80 :
eval = 'Excellent'
elif Point[i] >= 40 :
eval = 'Pass'
else:
eval = 'Failed'
display.scroll(Seito[i]+':'+eval)
[コードE]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] >= 40 :
if Point[i]
< 80 :
eval = 'Pass'
else:
eval = 'Excellent'
else:
eval = 'Failed'
display.scroll(Seito[i]+':'+eval)
[コードF]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] >= 80 :
eval = 'Excellent'
else:
if Point[i] < 40 :
eval = 'Failed'
else:
eval = 'Pass'
display.scroll(Seito[i]+':'+eval)
[コードG]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] >= 40 :
eval = 'Pass'
if Point[i] >= 80 :
eval = 'Excellent'
else:
eval = 'Failed'
display.scroll(Seito[i]+':'+eval)
[コードH]
Seito = ['Saito','Yamada','Suzuki']
Point = [65, 38, 82]
for i in range(3):
if Point[i] < 80 :
eval = 'Pass'
if Point[i] < 40 :
eval = 'Failed'
else:
eval = 'Excellent'
display.scroll(Seito[i]+':'+eval)
⑪
リストの各要素の大きさを 「 > 」 の個数で表した"絵グラフ"を作成した。
空欄に適当なコードを入れよ。
Data = [2,6,8,4,1]
for i in range(5):
graph =
''
for j in range( Data[i] ):
graph = graph + '>'
display.scroll(graph)
# 実行結果 : >> >>>>>> >>>>>>>> >>>> >
⑫
同じ目が続けて 3 回出るまで 1 個のサイコロを振り続ける。下のプログラムは,試行後,終了までの回数と終了に至ったサイコロの目を表示するものである。
空欄に適当なコードを入れよ。
import random
a0 = 0 #現在のサイコロの目
a1 = 0 #前回のサイコロの目
a2 = 0 #前々回のサイコロの目
count =
0 #サイコロを振った回数
while True:
a0 = random.randint(1,6)
count = count + 1
if a0 == a1
and a0 == a2:
break
else:
a2 =
a1
a1 =
a0
display.scroll('Times:'+str(count))
display.scroll('Dice:'+str(a0))
# 表示例 ⇒ Times:79 Dice:5 ( 「・・・ 77回 5の目, 78回 5の目, 79回 5の目 で終了」 の意味)
表示
消去
6 関数
①
実行結果を求めよ。
引数:無 戻り値:無
def greet():
display.scroll("Hello")
greet()
引数:有 戻り値:無
def greet(name):
display.scroll("Hi,",name)
greet("Taro")
[Hello ]
[Hi, Taro ]
引数:無 戻り値:有
def greet():
return "See you!"
display.scroll(greet())
引数:有 戻り値:有
def greet(n):
return "Hey," + n
display.scroll(greet("Ken"))
[See you! ]
[Hey,Ken ]
②
実行結果を求めよ。
def EvenOdd(num):
if num % 2 == 0:
check = "even"
else:
check = "odd"
return check
n = 8
display.scroll(EvenOdd(n))
display.scroll(EvenOdd(5)) [even odd ]
③
実行結果を求めよ。
def area(base,height):
return base * height / 2
teihen = 8
takasa = 5
menseki = area(teihen,takasa)
display.scroll(menseki)
def bmi(height,weight):
value = weight / height**2
return value
shincho = 1.60
taiju = 64
display.scroll(bmi(shincho, taiju))
[20.0 ]
[25.0 ]
④
空欄に適当なコードを入れよ。
# 2つの整数間の全ての整数の和
def total(min,max) :
sum = 0
i = min
while i <= max:
sum = sum + i
i = i + 1
return sum
s = total(3,7)
display.scroll("Total:"+str(s))
# 出力 ⇒ Total:25
# 正の整数の桁数を求める
def ketasu (number):
m = number
digit = 0 # 桁数
while m > 0 :
m = m // 10
digit = digit + 1
return digit
display.scroll(ketasu(3))
display.scroll(ketasu(470))
display.scroll(ketasu(8105926))
# 出力 ⇒ 1 3 7
⑤
配列 Array の全ての要素の平均を求めるプログラムである。空欄を埋めよ。
Array = [2,7,4,6,3,8]
sum = 0
for n in range(0, len(Array)): # len() は要素の個数を求める組み込み関数
sum = sum + Array[n]
print(sum/(
n+1 ))
#出力 ⇒ 5.0
⑥
右の図の色の付いた部分の周囲の長さと面積を求めたい。
空欄に適当なコードを入れよ。
def c1(radius): #円周の長さ
pai = 3.141592
return 2 * pai * radius
def c2(radius): #円の面積
pai = 3.141592
return pai * radius ** 2
a = 10 #例として
b = 6 #例として
#半径を求める
ra = a / 2
rb = b / 2
rab = (a + b) / 2
shui =
c1(rab) / 2 +
c1(ra) / 2 +
c1(rb) / 2
menseki =
c2(rab) / 2 −
c2(ra) / 2 −
c2(rb) / 2
display.scroll('shui:')
display.scroll(shui)
display.scroll('menseki:')
display.scroll(menseki) #出力 ⇒ shui: 50.26547 menseki: 47.12388
⑦
「2つの整数100と200との間に,2または3の倍数はいくつあるか。」
これを求めるためのプログラムを作った。空欄に適当なコードを入れよ。
def baisu(min,max,base): # min 以上 max 以下で base の倍数の個数
n = min
count = 0 # 倍数の個数の初期値を 0 に設定
while
n <= max :
if
n % base == 0 :
count =
count + 1
n =
n + 1
return
count
a = 100
b = 200
kosu = baisu(
a, b, 2 ) + baisu(
a, b, 3 ) - baisu(
a, b, 6 )
display.scroll('kosu:'+str(kosu))
# 出力 ⇒ kosu:67
⑧
関数 y = f(x) が,x
1 ≦x≦x
2 において x 軸と交わる交点を求めたい。
すなわち,同範囲における方程式 f(x) = 0 の解を求めればよい。
ここでは,関数を f(x)=x
3 −10 x
2 + 27 x−18として,
0≦x≦10 における f(x) = 0 の整数解を求めるプログラムを作成しよう。
空欄に適当なコードを入れよ。
def f(x):
y = x**3−10*x**2+27*x−18
return y
def solution(min,max):
x =
min
while
x <= max :
if
f(x) == 0 :
display.scroll('x=')
display.scroll(x)
x =
x + 1
solution(0,10)
# 出力 ⇒ x=1 x=3 x=6
# この関数を ((x−10) * x+27) * x−18 とコーディングすることもある。
⑨
階乗を計算する関数,及び 順列と組合せを計算する関数を作成した。
これらの関数の動作確認のため,
5 P
3 ,
7 C
5 を算出するプログラムも作成した。
空欄に適当なコードを入れよ。
def fact(n):
m = 0
f = 1
while m < n :
m = m + 1
f = f * m
return f
def nPr(n, r):
return fact(n)/fact(n − r)
def nCr(n, r):
return nPr(n, r)/fact(r)
display.scroll(nPr( 5, 3 ))
display.scroll(nCr( 7, 5 ))
# 階乗を計算する関数
# 順列を計算する関数
# 組合せを計算する関数
# 出力 ⇒ 60.0 21.0
表示
消去