Pythonプログラミングを習得するために,以下の課題を上から順番に解いてください.正しく実装されたかどうかの確認は,実際に動作させてみて想定通りの動作をしているかどうかでご確認ください.正しいソースコードを知りたい場合は生成AIに聞いてください.以下の課題はいずれもオーソドックスな課題であるため,生成AIは正しく実装できるはずです.
完成品のソースコードの分量の目安:約4行
九九の表を出力するプログラムを作れ
Prototype
print('% 3d '%81,end='')
print()
Output
 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18 
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81
完成品のソースコードの分量の目安:約5行
偶数か奇数か判定するプログラムを作れ
Prototype
number=int(input('整数を入力してください: '))
print('偶数です')
Output
整数を入力してください: 23
奇数です
Output
整数を入力してください: 20
偶数です
完成品のソースコードの分量の目安:約7行
合計を計算するプログラムを作れ
Prototype
while True:
    number=int(input('1以上の整数を入力してください(終了するときは0を入力してください):
'))
    if number==0:
        break
print('合計は',0)
Output
1以上の整数を入力してください(終了するときは0を入力してください): 3
1以上の整数を入力してください(終了するときは0を入力してください): 14
1以上の整数を入力してください(終了するときは0を入力してください): 7
1以上の整数を入力してください(終了するときは0を入力してください): 26
1以上の整数を入力してください(終了するときは0を入力してください): 0
合計は 50
完成品のソースコードの分量の目安:約6行
6%の確率で当たりが出るくじを11枚引くプログラムを作れ
Prototype
import random
for i in range(11):
    print('あたり')
Output
はずれ
はずれ
はずれ
はずれ
はずれ
はずれ
はずれ
はずれ
はずれ
あたり
はずれ
完成品のソースコードの分量の目安:約8行
じゃんけんプログラムを作れ
Prototype
import random
player=int(input('0=グー, 1=チョキ, 2=パー: '))
if 0<=player<=2:
    print('コンピュータは','グー','を出しました')
Output
0=グー, 1=チョキ, 2=パー: 1
コンピュータは グー を出しました
あなたの負け
完成品のソースコードの分量の目安:約13行
属性に応じて攻撃の倍率の変わるプログラムを作れ
属性0は属性1に2倍のダメージ
属性1は属性0に2倍のダメージ
属性2は属性3に2倍のダメージ
属性3は属性4に2倍のダメージ
属性4は属性2に2倍のダメージ
属性2は属性4に0.5倍のダメージ
属性4は属性3に0.5倍のダメージ
属性3は属性2に0.5倍のダメージ
それ以外は1倍のダメージ
Prototype
import random
attribute=['光','闇','火','風','水']
player=random.randint(0,4)
enemy=random.randint(0,4)
print(attribute[player],'属性から',attribute[enemy],'属性に攻撃')
print('ダメージは',1,'倍')
Output
水 属性から 火 属性に攻撃
ダメージは 2 倍

完成品のソースコードの分量の目安:約8行
単体の敵とバトルをするプログラムを作れ
Prototype
import random
enemy=random.randint(100,200)
print('敵の体力は',enemy)
damage=random.randint(1,50)
print('敵に',damage,'のダメージを与えた')
print('敵を倒した')
Output
敵の体力は 141
敵に 47 のダメージを与えた
敵の体力は 94
敵に 29 のダメージを与えた
敵の体力は 65
敵に 39 のダメージを与えた
敵の体力は 26
敵に 28 のダメージを与えた
敵を倒した
完成品のソースコードの分量の目安:約15行
経験値に応じてレベルが上がるプログラムを作れ
レベルが上がるごとに必要な経験値も増えるものとする
Prototype
experiment=[100,120,140,160,180,200,220,240,260]
level=1
point=int(input('経験値をいくつ獲得しましたか? '))
print('レベル',level+1,'になるには',experiment[level-1],'の経験値が必要です')
level+=1
print('レベルが',level,'になった')
print('残りの経験値は',point)
Output
経験値をいくつ獲得しましたか? 500
レベル 2 になるには 100 の経験値が必要です
レベルが 2 になった
残りの経験値は 400
レベル 3 になるには 120 の経験値が必要です
レベルが 3 になった
残りの経験値は 280
レベル 4 になるには 140 の経験値が必要です
レベルが 4 になった
残りの経験値は 140
レベル 5 になるには 160 の経験値が必要です
完成品のソースコードの分量の目安:約8行
最大値と最小値を見つけるプログラムを作れ
Prototype
while True:
    number=int(input('1以上の整数を入力してください(終了するときは0を入力してください):
'))
    if number<=0:
        break
print('最大値は', 0)
print('最小値は', 0)
Output
1以上の整数を入力してください(終了するときは0を入力してください): 34
1以上の整数を入力してください(終了するときは0を入力してください): 77
1以上の整数を入力してください(終了するときは0を入力してください): 32
1以上の整数を入力してください(終了するときは0を入力してください): 67
1以上の整数を入力してください(終了するときは0を入力してください): 79
1以上の整数を入力してください(終了するときは0を入力してください): 0
最大値は 79
最小値は 32
完成品のソースコードの分量の目安:約12行
数字が大きいか小さいか当てるプログラムを作れ
Prototype
import random
player=random.randint(1,13)
enemy=random.randint(1,13)
guess=int(input('%dより小さいと思うなら0, %dより大きいと思うなら1: '%(enemy,enemy)))
if 0<=guess<=1:
    print('あなたの数字は',player)
    if player==enemy:
        print('勝負不成立')
Output
4より小さいと思うなら0, 4より大きいと思うなら1: 0
あなたの数字は 7
はずれ
完成品のソースコードの分量の目安:約6行
素数かどうか判定するプログラムを作れ
Prototype
number=int(input('整数を入力してください: '))
print('素数です')
Output
整数を入力してください: 14
素数ではありません
完成品のソースコードの分量の目安:約6行
3の倍数と3がつくときahoと出力するプログラムを作れ
Prototype
print('3の倍数と3がつくときahoと出力します')
number=int(input('整数を入力してください: '))
print('aho')
Output
3の倍数と3がつくときahoと出力します
整数を入力してください: 130
aho
完成品のソースコードの分量の目安:約18行
宝くじが当選しているか確認するプログラムを作れ
Prototype
import random
lottery4=random.randint(1000,9999)
lottery3=random.randint(100,999)
lottery2=random.randint(10,99)
lottery1=random.randint(1,9)
print('1等は %04d 下4桁'%lottery4)
print('2等は *%03d 下3桁'%lottery3)
print('3等は **%02d 下2桁'%lottery2)
print('4等は ***%01d 下1桁'%lottery1)
lotteryyours=int(input('あなたの宝くじの番号は: '))
print('?等に当選')
Output
1等は 7866 下4桁
2等は *658 下3桁
3等は **24 下2桁
4等は ***8 下1桁
あなたの宝くじの番号は: 3658
2等に当選
4等に当選
完成品のソースコードの分量の目安:約27行
素因数分解プログラムを作れ
Prototype
number=int(input('整数を入力してください: '))
print('素因数分解すると')
print(1)
Output
整数を入力してください: 360
素因数分解すると
2
2
2
3
3
5
完成品のソースコードの分量の目安:約8行
入力された数字をソートするプログラムを作れ
Prototype
print('整数を10個入力してください')
for i in range(10):
    number=int(input())
print('小さい値から大きい値の順に並べると')
print('[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]')
Output
整数を10個入力してください
34
23
78
55
55
12
98
45
23
97
小さい値から大きい値の順に並べると
[12, 23, 23, 34, 45, 55, 55, 78, 97, 98]
完成品のソースコードの分量の目安:約26行
スピードだけではなくスタミナなどの要素の入った競争プログラムを作れ
Prototype
import random
print('1秒あたりの速度とし,スタミナは1秒とし,スタミナが0になったらスピードは半分になるものとする')
length=1600+random.randint(0,2)*400
print('レースの距離は',length)
speed=[]
stamina=[]
run=[]
NUMBER=16
for i in range(NUMBER):
    speed.append(6+random.randint(0,7)*2)
    stamina.append(20+random.randint(0,9)*10)
    run.append(0)
    print(i,'番のスピードは',speed[i],'スタミナは',stamina[i])
print('スタート')
Output
1秒あたりの速度とし,スタミナは1秒とし,スタミナが0になったらスピードは半分になるものとする
レースの距離は 2000
0 番のスピードは 18 スタミナは 70
1 番のスピードは 14 スタミナは 30
2 番のスピードは 8 スタミナは 30
3 番のスピードは 20 スタミナは 40
4 番のスピードは 6 スタミナは 110
5 番のスピードは 8 スタミナは 60
6 番のスピードは 6 スタミナは 20
7 番のスピードは 6 スタミナは 80
8 番のスピードは 18 スタミナは 110
9 番のスピードは 16 スタミナは 60
10 番のスピードは 20 スタミナは 50
11 番のスピードは 12 スタミナは 80
12 番のスピードは 12 スタミナは 60
13 番のスピードは 14 スタミナは 70
14 番のスピードは 16 スタミナは 60
15 番のスピードは 10 スタミナは 80
スタート
1着 3 番  走行距離 20  スピード 20  スタミナ 39
1着 3 番  走行距離 40  スピード 20  スタミナ 38
1着 3 番  走行距離 60  スピード 20  スタミナ 37
1着 3 番  走行距離 80  スピード 20  スタミナ 36
1着 3 番  走行距離 100  スピード 20  スタミナ 35
1着 3 番  走行距離 120  スピード 20  スタミナ 34
1着 3 番  走行距離 140  スピード 20  スタミナ 33
1着 3 番  走行距離 160  スピード 20  スタミナ 32
1着 3 番  走行距離 180  スピード 20  スタミナ 31
1着 3 番  走行距離 200  スピード 20  スタミナ 30
1着 3 番  走行距離 220  スピード 20  スタミナ 29
1着 3 番  走行距離 240  スピード 20  スタミナ 28
1着 3 番  走行距離 260  スピード 20  スタミナ 27
1着 3 番  走行距離 280  スピード 20  スタミナ 26
1着 3 番  走行距離 300  スピード 20  スタミナ 25
1着 3 番  走行距離 320  スピード 20  スタミナ 24
1着 3 番  走行距離 340  スピード 20  スタミナ 23
1着 3 番  走行距離 360  スピード 20  スタミナ 22
1着 3 番  走行距離 380  スピード 20  スタミナ 21
1着 3 番  走行距離 400  スピード 20  スタミナ 20
1着 3 番  走行距離 420  スピード 20  スタミナ 19
1着 3 番  走行距離 440  スピード 20  スタミナ 18
1着 3 番  走行距離 460  スピード 20  スタミナ 17
1着 3 番  走行距離 480  スピード 20  スタミナ 16
1着 3 番  走行距離 500  スピード 20  スタミナ 15
1着 3 番  走行距離 520  スピード 20  スタミナ 14
1着 3 番  走行距離 540  スピード 20  スタミナ 13
1着 3 番  走行距離 560  スピード 20  スタミナ 12
1着 3 番  走行距離 580  スピード 20  スタミナ 11
1着 3 番  走行距離 600  スピード 20  スタミナ 10
1着 3 番  走行距離 620  スピード 20  スタミナ 9
1着 3 番  走行距離 640  スピード 20  スタミナ 8
1着 3 番  走行距離 660  スピード 20  スタミナ 7
1着 3 番  走行距離 680  スピード 20  スタミナ 6
1着 3 番  走行距離 700  スピード 20  スタミナ 5
1着 3 番  走行距離 720  スピード 20  スタミナ 4
1着 3 番  走行距離 740  スピード 20  スタミナ 3
1着 3 番  走行距離 760  スピード 20  スタミナ 2
1着 3 番  走行距離 780  スピード 20  スタミナ 1
1着 3 番  走行距離 800  スピード 20  スタミナ 0
1着 10 番  走行距離 820  スピード 20  スタミナ 9
1着 10 番  走行距離 840  スピード 20  スタミナ 8
1着 10 番  走行距離 860  スピード 20  スタミナ 7
1着 10 番  走行距離 880  スピード 20  スタミナ 6
1着 10 番  走行距離 900  スピード 20  スタミナ 5
1着 10 番  走行距離 920  スピード 20  スタミナ 4
1着 10 番  走行距離 940  スピード 20  スタミナ 3
1着 10 番  走行距離 960  スピード 20  スタミナ 2
1着 10 番  走行距離 980  スピード 20  スタミナ 1
1着 10 番  走行距離 1000  スピード 20  スタミナ 0
1着 10 番  走行距離 1010  スピード 20  スタミナ 0
1着 10 番  走行距離 1020  スピード 20  スタミナ 0
1着 10 番  走行距離 1030  スピード 20  スタミナ 0
1着 10 番  走行距離 1040  スピード 20  スタミナ 0
1着 10 番  走行距離 1050  スピード 20  スタミナ 0
1着 10 番  走行距離 1060  スピード 20  スタミナ 0
1着 10 番  走行距離 1070  スピード 20  スタミナ 0
1着 10 番  走行距離 1080  スピード 20  スタミナ 0
1着 10 番  走行距離 1090  スピード 20  スタミナ 0
1着 10 番  走行距離 1100  スピード 20  スタミナ 0
1着 10 番  走行距離 1110  スピード 20  スタミナ 0
1着 10 番  走行距離 1120  スピード 20  スタミナ 0
1着 0 番  走行距離 1134  スピード 18  スタミナ 7
1着 0 番  走行距離 1152  スピード 18  スタミナ 6
1着 0 番  走行距離 1170  スピード 18  スタミナ 5
1着 0 番  走行距離 1188  スピード 18  スタミナ 4
1着 0 番  走行距離 1206  スピード 18  スタミナ 3
1着 0 番  走行距離 1224  スピード 18  スタミナ 2
1着 0 番  走行距離 1242  スピード 18  スタミナ 1
1着 0 番  走行距離 1260  スピード 18  スタミナ 0
1着 8 番  走行距離 1278  スピード 18  スタミナ 39
1着 8 番  走行距離 1296  スピード 18  スタミナ 38
1着 8 番  走行距離 1314  スピード 18  スタミナ 37
1着 8 番  走行距離 1332  スピード 18  スタミナ 36
1着 8 番  走行距離 1350  スピード 18  スタミナ 35
1着 8 番  走行距離 1368  スピード 18  スタミナ 34
1着 8 番  走行距離 1386  スピード 18  スタミナ 33
1着 8 番  走行距離 1404  スピード 18  スタミナ 32
1着 8 番  走行距離 1422  スピード 18  スタミナ 31
1着 8 番  走行距離 1440  スピード 18  スタミナ 30
1着 8 番  走行距離 1458  スピード 18  スタミナ 29
1着 8 番  走行距離 1476  スピード 18  スタミナ 28
1着 8 番  走行距離 1494  スピード 18  スタミナ 27
1着 8 番  走行距離 1512  スピード 18  スタミナ 26
1着 8 番  走行距離 1530  スピード 18  スタミナ 25
1着 8 番  走行距離 1548  スピード 18  スタミナ 24
1着 8 番  走行距離 1566  スピード 18  スタミナ 23
1着 8 番  走行距離 1584  スピード 18  スタミナ 22
1着 8 番  走行距離 1602  スピード 18  スタミナ 21
1着 8 番  走行距離 1620  スピード 18  スタミナ 20
1着 8 番  走行距離 1638  スピード 18  スタミナ 19
1着 8 番  走行距離 1656  スピード 18  スタミナ 18
1着 8 番  走行距離 1674  スピード 18  スタミナ 17
1着 8 番  走行距離 1692  スピード 18  スタミナ 16
1着 8 番  走行距離 1710  スピード 18  スタミナ 15
1着 8 番  走行距離 1728  スピード 18  スタミナ 14
1着 8 番  走行距離 1746  スピード 18  スタミナ 13
1着 8 番  走行距離 1764  スピード 18  スタミナ 12
1着 8 番  走行距離 1782  スピード 18  スタミナ 11
1着 8 番  走行距離 1800  スピード 18  スタミナ 10
1着 8 番  走行距離 1818  スピード 18  スタミナ 9
1着 8 番  走行距離 1836  スピード 18  スタミナ 8
1着 8 番  走行距離 1854  スピード 18  スタミナ 7
1着 8 番  走行距離 1872  スピード 18  スタミナ 6
1着 8 番  走行距離 1890  スピード 18  スタミナ 5
1着 8 番  走行距離 1908  スピード 18  スタミナ 4
1着 8 番  走行距離 1926  スピード 18  スタミナ 3
1着 8 番  走行距離 1944  スピード 18  スタミナ 2
1着 8 番  走行距離 1962  スピード 18  スタミナ 1
1着 8 番  走行距離 1980  スピード 18  スタミナ 0
1着 8 番  走行距離 1989  スピード 18  スタミナ 0
1着 8 番  走行距離 1998  スピード 18  スタミナ 0
1着 8 番  走行距離 2007  スピード 18  スタミナ 0
完成品のソースコードの分量の目安:約49行
○×ゲームプログラムを作れ
Prototype
import random
board=[[0,0,0],[0,0,0],[0,0,0]]
graphic=['.','o','x']
print('あなたは o です')
print(' 123')
for i in range(3):
    print(i+1,end='')
    for j in range(3):
        print(graphic[board[i][j]],end='')
    print()
puti=int(input('行番号(1~3):'))-1
putj=int(input('列番号(1~3):'))-1
Output
あなたは o です
 123
1...
2...
3...
行番号(1~3):3
列番号(1~3):1
 123
1...
2...
3o..
 123
1...
2...
3o.x
行番号(1~3):3
列番号(1~3):2
 123
1...
2...
3oox
 123
1..x
2...
3oox
行番号(1~3):2
列番号(1~3):1
 123
1..x
2o..
3oox
 123
1..x
2o.x
3oox
xの勝ち
完成品のソースコードの分量の目安:約58行
敵が複数いるバトルプログラムを作れ
Prototype
enemyhp=[100,120,190]
enemyattack=[35,25,15]
enemydefense=[5,10,20]
playerhp=105
playerattackone=70
playerattackall=40
playerdefense=10
for i in range(3):
    if enemyhp[i] > 0:
        print('敵%d HP%d 攻撃力%d 防御力%d'%(i,enemyhp[i],enemyattack[i],enemydefense[i]))
print('あなた HP%d 物理攻撃力%d 魔法攻撃力%d 防御力%d'%(playerhp,playerattackone,playerattackall,playerdefense))
command=int(input('0=物理単体攻撃 1=魔法全体攻撃: '))
print('攻撃する敵の番号')
enemyid=int(input())
print('敵%dに物理攻撃'%enemyid)
damage=0
print('敵%dに%dのダメージを与えた'% (enemyid,damage))
print('敵%dを倒した'%enemyid)
print('敵全体に魔法攻撃')
for i in range(3):
    damage=0
    print('敵%dに%dのダメージを与えた'%(i,damage))
    print('敵%dを倒した'%i)
    print('敵を全て倒した')
for i in range(3):
    damage=0
    print('敵%dから%dのダメージをくらった'%(i,damage))
    print('あなたはやられてしまった')
Output
敵0 HP100 攻撃力35 防御力5
敵1 HP120 攻撃力25 防御力10
敵2 HP190 攻撃力15 防御力20
あなた HP105 物理攻撃力70 魔法攻撃力40 防御力10
0=物理単体攻撃 1=魔法全体攻撃: 1
敵全体に魔法攻撃
敵0に35のダメージを与えた
敵1に30のダメージを与えた
敵2に20のダメージを与えた
敵0から25のダメージをくらった
敵1から15のダメージをくらった
敵2から5のダメージをくらった
敵0 HP65 攻撃力35 防御力5
敵1 HP90 攻撃力25 防御力10
敵2 HP170 攻撃力15 防御力20
あなた HP60 物理攻撃力70 魔法攻撃力40 防御力10
0=物理単体攻撃 1=魔法全体攻撃: 0
攻撃する敵の番号
1
敵1に物理攻撃
敵1に60のダメージを与えた
敵0から25のダメージをくらった
敵1から15のダメージをくらった
敵2から5のダメージをくらった
敵0 HP65 攻撃力35 防御力5
敵1 HP30 攻撃力25 防御力10
敵2 HP170 攻撃力15 防御力20
あなた HP15 物理攻撃力70 魔法攻撃力40 防御力10
0=物理単体攻撃 1=魔法全体攻撃: 0
攻撃する敵の番号
2
敵2に物理攻撃
敵2に50のダメージを与えた
敵0から25のダメージをくらった
あなたはやられてしまった
完成品のソースコードの分量の目安:約72行
自動販売機プログラムを作れ
Prototype
print('自動販売機に入っているコインは何枚ですか?')
vending500=int(input('500円玉: '))
vending100=int(input('100円玉: '))
vending50=int(input('50円玉: '))
vending10=int(input('10円玉: '))
cost=int(input('商品の金額はいくらですか? '))
if cost%10!=0:
    print('商品の金額は10円単位で入力してください')
    exit()
print('自動販売機に入れるコインは何枚ですか?')
pay500=int(input('500円玉: '))
pay100=int(input('100円玉: '))
pay50=int(input('50円玉: '))
pay10=int(input('10円玉: '))
back500=0
back100=0
back50=0
back10=0
print('商品とお釣り',0,'円をお渡しします')
print('500円玉',back500,'枚')
print('100円玉',back100,'枚')
print('50円玉',back50,'枚')
print('10円玉',back10,'枚')
print('自動販売機に残っているコインの枚数は')
print('500円玉',vending500,'枚')
print('100円玉',vending100,'枚')
print('50円玉',vending50,'枚')
print('10円玉',vending10,'枚')
Output
自動販売機に入っているコインは何枚ですか?
500円玉: 1
100円玉: 1
50円玉: 1
10円玉: 1
商品の金額はいくらですか? 130
自動販売機に入れるコインは何枚ですか?
500円玉: 0
100円玉: 1
50円玉: 0
10円玉: 3
商品とお釣り 0 円をお渡しします
500円玉 0 枚
100円玉 0 枚
50円玉 0 枚
10円玉 0 枚
自動販売機に残っているコインの枚数は
500円玉 1 枚
100円玉 2 枚
50円玉 1 枚
10円玉 4 枚
Output
自動販売機に入っているコインは何枚ですか?
500円玉: 1
100円玉: 1
50円玉: 1
10円玉: 1
商品の金額はいくらですか? 130
自動販売機に入れるコインは何枚ですか?
500円玉: 0
100円玉: 2
50円玉: 0
10円玉: 0
お釣り 70 円がないため購入できません
Output
自動販売機に入っているコインは何枚ですか?
500円玉: 10
100円玉: 10
50円玉: 0
10円玉: 10
商品の金額はいくらですか? 130
自動販売機に入れるコインは何枚ですか?
500円玉: 0
100円玉: 2
50円玉: 0
10円玉: 0
商品とお釣り 70 円をお渡しします
500円玉 0 枚
100円玉 0 枚
50円玉 0 枚
10円玉 7 枚
自動販売機に残っているコインの枚数は
500円玉 10 枚
100円玉 12 枚
50円玉 0 枚
10円玉 3 枚
Output
自動販売機に入っているコインは何枚ですか?
500円玉: 10
100円玉: 10
50円玉: 10
10円玉: 10
商品の金額はいくらですか? 130
自動販売機に入れるコインは何枚ですか?
500円玉: 1
100円玉: 0
50円玉: 0
10円玉: 0
商品とお釣り 370 円をお渡しします
500円玉 0 枚
100円玉 3 枚
50円玉 1 枚
10円玉 2 枚
自動販売機に残っているコインの枚数は
500円玉 11 枚
100円玉 7 枚
50円玉 9 枚
10円玉 8 枚
完成品のソースコードの分量の目安:約48行
ばばぬきプログラムを作れ
Prototype
import random
player=[[],[]]
allcard=[]
for i in range(1,14):
    for j in range(4):
        allcard.append(i)
allcard.append(0)
random.shuffle(allcard)
for i in range(len(allcard)):
    player[i%2].append(allcard[i])
player[0].sort()
player[1].sort()
for i in range(2):
    print(['あなた','コンピュータ'][i],'の手札')
    for j in range(len(player[i])):
        if player[i][j]==0:
            print('Joker
',end='')
        else:
            print('%d
'%player[i][j],end='')
    print()
while True:
    card=int(input('何枚目のカードを取りますか?(%d~%d): '%(1,len(player[1]))))-1
    if 0<=card<len(player[1]):
        break
card=random.randint(0,len(player[0])-1)
print('コンピュータは%d枚目のカードを取りました'%(card+1))
Output
あなた の手札
1 2 4 5 6 7 10 12 13
コンピュータ の手札
Joker 1 2 4 5 6 7 10 12 13
何枚目のカードを取りますか?(1~10): 10
あなた の手札
1 2 4 5 6 7 10 12
コンピュータ の手札
Joker 1 2 4 5 6 7 10 12
コンピュータは6枚目のカードを取りました
あなた の手札
1 2 4 5 6 10 12
コンピュータ の手札
Joker 1 2 4 5 6 10 12
何枚目のカードを取りますか?(1~8): 2
あなた の手札
2 4 5 6 10 12
コンピュータ の手札
Joker 2 4 5 6 10 12
コンピュータは6枚目のカードを取りました
あなた の手札
2 4 5 6 10
コンピュータ の手札
Joker 2 4 5 6 10
何枚目のカードを取りますか?(1~6): 3
あなた の手札
2 5 6 10
コンピュータ の手札
Joker 2 5 6 10
コンピュータは4枚目のカードを取りました
あなた の手札
2 5 6
コンピュータ の手札
Joker 2 5 6
何枚目のカードを取りますか?(1~4): 3
あなた の手札
2 6
コンピュータ の手札
Joker 2 6
コンピュータは2枚目のカードを取りました
あなた の手札
2
コンピュータ の手札
Joker 2
何枚目のカードを取りますか?(1~2): 2
あなた の手札
コンピュータ の手札
Joker
あなたの勝ち
完成品のソースコードの分量の目安:約85行
オセロ対戦プログラムを作れ
Prototype
import random
global board
board=[
    [0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0],
    [0,0,0,2,1,0,0,0],
    [0,0,0,1,2,0,0,0],
    [0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0]
]
def main():
    graphics=['.','o','x']
    print('あなたは o です')
    print(' 12345678')
    for i in range(8):
        print('%d'%(i+1),end='')
        for j in range(8):
            print(graphics[board[i][j]],end='')
        print()
    youi=int(input('石を置く行番号(1~8): '))-1
    youj=int(input('石を置く列番号(1~8): '))-1
if __name__ == '__main__':
    main()
Output
あなたは o です
 12345678
1........
2........
3........
4...xo...
5...ox...
6........
7........
8........
石を置く行番号(1~8): 4
石を置く列番号(1~8): 3
 12345678
1........
2........
3........
4..ooo...
5...ox...
6........
7........
8........
 12345678
1........
2........
3..x.....
4..oxo...
5...ox...
6........
7........
8........
石を置く行番号(1~8): 3
石を置く列番号(1~8): 4
 12345678
1........
2........
3..xo....
4..ooo...
5...ox...
6........
7........
8........
 12345678
1........
2........
3..xo....
4..xoo...
5..xxx...
6........
7........
8........
石を置く行番号(1~8): 6
石を置く列番号(1~8): 3
 12345678
1........
2........
3..xo....
4..xoo...
5..xox...
6..o.....
7........
8........
 12345678
1........
2........
3..xo....
4..xxxx..
5..xox...
6..o.....
7........
8........
石を置く行番号(1~8): 3
石を置く列番号(1~8): 6
 12345678
1........
2........
3..xo.o..
4..xxox..
5..xox...
6..o.....
7........
8........
 12345678
1........
2........
3..xo.o..
4..xxox..
5..xxx...
6..o.x...
7........
8........
石を置く行番号(1~8): 6
石を置く列番号(1~8): 4
 12345678
1........
2........
3..xo.o..
4..xoox..
5..xox...
6..oox...
7........
8........
 12345678
1........
2.....x..
3..xo.x..
4..xoox..
5..xox...
6..oox...
7........
8........
石を置く行番号(1~8): 6
石を置く列番号(1~8): 6
 12345678
1........
2.....x..
3..xo.x..
4..xoox..
5..xoo...
6..oooo..
7........
8........
 12345678
1........
2.....x..
3..xo.x..
4..xoox..
5..xxxx..
6..oooo..
7........
8........
石を置く行番号(1~8): 1
石を置く列番号(1~8): 6
 12345678
1.....o..
2.....o..
3..xo.o..
4..xooo..
5..xxxo..
6..oooo..
7........
8........
 12345678
1.....o..
2.....o..
3..xo.o..
4..xooo..
5..xxxo..
6..ooxo..
7.....x..
8........
石を置く行番号(1~8): 8
石を置く列番号(1~8): 6
 12345678
1.....o..
2.....o..
3..xo.o..
4..xooo..
5..xxxo..
6..ooxo..
7.....o..
8.....o..
 12345678
1.....o..
2.....o..
3..xo.o..
4..xooo..
5..xxxo..
6..ooxxx.
7.....o..
8.....o..
石を置く行番号(1~8): 6
石を置く列番号(1~8): 8
 12345678
1.....o..
2.....o..
3..xo.o..
4..xooo..
5..xxxo..
6..oooooo
7.....o..
8.....o..
 12345678
1.....o..
2.....o..
3..xo.ox.
4..xoox..
5..xxxo..
6..oooooo
7.....o..
8.....o..
石を置く行番号(1~8): 3
石を置く列番号(1~8): 8
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox..
5..xxxo..
6..oooooo
7.....o..
8.....o..
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox..
5..xxxo..
6..ooxooo
7.....x..
8.....ox.
石を置く行番号(1~8): 8
石を置く列番号(1~8): 8
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox..
5..xxxo..
6..ooxooo
7.....x..
8.....ooo
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox..
5..xxxo.x
6..ooxoxo
7.....x..
8.....ooo
石を置く行番号(1~8): 4
石を置く列番号(1~8): 8
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox.o
5..xxxo.o
6..ooxoxo
7.....x..
8.....ooo
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox.o
5..xxxo.o
6..xoxoxo
7.x...x..
8.....ooo
石を置く行番号(1~8): 8
石を置く列番号(1~8): 1
 12345678
1.....o..
2.....o..
3..xo.ooo
4..xoox.o
5..xoxo.o
6..ooxoxo
7.o...x..
8o....ooo
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6..ooxoxo
7.o...x..
8o....ooo
石を置く行番号(1~8): 8
石を置く列番号(1~8): 5
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6..ooxooo
7.o...o..
8o...oooo
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6..ooxxoo
7.o...ox.
8o...oooo
石を置く行番号(1~8): 7
石を置く列番号(1~8): 8
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6..ooxxoo
7.o...ooo
8o...oooo
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6.xxxxxoo
7.o...ooo
8o...oooo
石を置く行番号(1~8): 6
石を置く列番号(1~8): 1
 12345678
1.....o..
2.....o..
3..xxxooo
4..xxxx.o
5..xoxo.o
6oooooooo
7.o...ooo
8o...oooo
 12345678
1.....o..
2.....ox.
3..xxxxoo
4..xxxx.o
5..xoxo.o
6oooooooo
7.o...ooo
8o...oooo
石を置く行番号(1~8): 1
石を置く列番号(1~8): 8
 12345678
1.....o.o
2.....oo.
3..xxxooo
4..xxox.o
5..xoxo.o
6oooooooo
7.o...ooo
8o...oooo
 12345678
1.....o.o
2.....oo.
3..xxxooo
4..xxox.o
5..xxxo.o
6oooxoooo
7.o.x.ooo
8o...oooo
石を置く行番号(1~8): 4
石を置く列番号(1~8): 7
 12345678
1.....o.o
2.....oo.
3..xxxooo
4..xxoooo
5..xxxo.o
6oooxoooo
7.o.x.ooo
8o...oooo
 12345678
1.....o.o
2.....oo.
3..xxxooo
4..xxoxoo
5..xxxxxo
6oooxoooo
7.o.x.ooo
8o...oooo
石を置く行番号(1~8): 5
石を置く列番号(1~8): 2
 12345678
1.....o.o
2.....oo.
3..xxxooo
4..xxoxoo
5.ooooooo
6oooxoooo
7.o.x.ooo
8o...oooo
 12345678
1.....o.o
2.....oox
3..xxxoxo
4..xxoxoo
5.ooooooo
6oooxoooo
7.o.x.ooo
8o...oooo
石を置く行番号(1~8): 8
石を置く列番号(1~8): 4
 12345678
1.....o.o
2.....oox
3..xxxoxo
4..xxoxoo
5.ooooooo
6oooooooo
7.o.o.ooo
8o..ooooo
 12345678
1.....oxo
2.....xxx
3..xxxoxo
4..xxoxoo
5.ooooooo
6oooooooo
7.o.o.ooo
8o..ooooo
石を置く行番号(1~8): 2
石を置く列番号(1~8): 5
 12345678
1.....oxo
2....oxxx
3..xoooxo
4..oxoxoo
5.ooooooo
6oooooooo
7.o.o.ooo
8o..ooooo
 12345678
1.....oxo
2....oxxx
3..xoooxo
4..xxoxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
石を置く行番号(1~8): 4
石を置く列番号(1~8): 2
 12345678
1.....oxo
2....oxxx
3..xoooxo
4.ooooxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
 12345678
1.....oxo
2....oxxx
3x.xoooxo
4.xoooxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
石を置く行番号(1~8): 3
石を置く列番号(1~8): 2
 12345678
1.....oxo
2....oxxx
3xoooooxo
4.ooooxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
 12345678
1....xxxo
2....xxxx
3xoooxoxo
4.oooxxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
石を置く行番号(1~8): 1
石を置く列番号(1~8): 4
 12345678
1...ooooo
2....oxxx
3xoooxoxo
4.oooxxoo
5.oxoxooo
6ooxxoooo
7.oxo.ooo
8o..ooooo
 12345678
1...ooooo
2....oxxx
3xoooxoxo
4.oooxxoo
5xxxoxooo
6oxxxoooo
7.oxo.ooo
8o..ooooo
石を置く行番号(1~8): 4
石を置く列番号(1~8): 2
石を置けなかったのでパスします
 12345678
1...ooooo
2....oxxx
3xoooxoxo
4.oooxxoo
5xxxoxooo
6oxxxoooo
7.oxo.ooo
8o..ooooo
 12345678
1...ooooo
2...xxxxx
3xoxxxoxo
4.xoxxxoo
5xxxxxooo
6oxxxoooo
7.oxo.ooo
8o..ooooo
石を置く行番号(1~8): 7
石を置く列番号(1~8): 1
 12345678
1...ooooo
2...xxoxx
3xoxxooxo
4.xooxxoo
5xxoxxooo
6ooxxoooo
7ooxo.ooo
8o..ooooo
 12345678
1...ooooo
2.x.xxoxx
3xxxxooxo
4.xooxxoo
5xxoxxooo
6ooxxoooo
7ooxo.ooo
8o..ooooo
石を置く行番号(1~8): 7
石を置く列番号(1~8): 5
 12345678
1...ooooo
2.x.xxoxx
3xxxxooxo
4.xooxxoo
5xxoxxooo
6ooxooooo
7ooxooooo
8o..ooooo
 12345678
1...ooooo
2.x.xxoxx
3xxxxooxo
4.xooxxoo
5xxoxxooo
6oxxooooo
7oxxooooo
8ox.ooooo
石を置く行番号(1~8): 8
石を置く列番号(1~8): 3
 12345678
1...ooooo
2.x.xxoxx
3xxxxooxo
4.xooxxoo
5xxoxxooo
6oxoooooo
7oooooooo
8oooooooo
 12345678
1...ooooo
2.x.xxoxx
3xxxxooxo
4.xooxxoo
5xxoxxooo
6oxoooooo
7oooooooo
8oooooooo
石を置く行番号(1~8): 1
石を置く列番号(1~8): 1
 12345678
1o..ooooo
2.o.xxoxx
3xxoxooxo
4.xooxxoo
5xxoxxooo
6oxoooooo
7oooooooo
8oooooooo
 12345678
1o.xooooo
2.x.xxoxx
3xxoxooxo
4.xooxxoo
5xxoxxooo
6oxoooooo
7oooooooo
8oooooooo
石を置く行番号(1~8): 1
石を置く列番号(1~8): 2
 12345678
1oooooooo
2.o.xxoxx
3xooxooxo
4.oooxxoo
5xooxxooo
6oooooooo
7oooooooo
8oooooooo
 12345678
1oooooooo
2xo.xxoxx
3xxoxooxo
4.oxoxxoo
5xooxxooo
6oooooooo
7oooooooo
8oooooooo
石を置く行番号(1~8): 4
石を置く列番号(1~8): 1
 12345678
1oooooooo
2oo.xxoxx
3oxoxooxo
4ooxoxxoo
5oooxxooo
6oooooooo
7oooooooo
8oooooooo
 12345678
1oooooooo
2ooxxxoxx
3oxxxooxo
4ooxoxxoo
5oooxxooo
6oooooooo
7oooooooo
8oooooooo
石を置く行番号(1~8): 1
石を置く列番号(1~8): 1
石を置けなかったのでパスします
 12345678
1oooooooo
2ooxxxoxx
3oxxxooxo
4ooxoxxoo
5oooxxooo
6oooooooo
7oooooooo
8oooooooo
 12345678
1oooooooo
2ooxxxoxx
3oxxxooxo
4ooxoxxoo
5oooxxooo
6oooooooo
7oooooooo
8oooooooo 
完成品のソースコードの分量の目安:約57行
同じ番号が上下左右に連結している数が4つ以上のものを消せ
(ラベリングアルゴリズムではなく再帰関数で実装するほうが良い)
Prototype
global field
field=[
    [4,0,0,0,0,0,0,0],
    [2,5,0,0,0,0,1,3],
    [5,1,1,0,0,0,1,3],
    [1,3,4,0,0,0,1,1],
    [2,2,2,0,0,0,4,2],
    [2,2,2,2,0,0,3,2],
    [2,2,2,3,0,0,2,1],
    [1,3,2,3,0,1,1,1],
    [5,1,1,1,5,1,4,1],
    [2,5,2,2,2,1,1,1]
]
global discard
discard=[[False]*8 for _ in range(10)]
def main():
    for i in range(10):
        for j in range(8):
            if
discard[i][j]:
                print('*',end='')
            else:
                print(field[i][j],end='')
        print()
if __name__ == "__main__":
    main() 
Output
40000000
250000*3
511000*3
134000**
***00042
****0032
***3002*
13*30***
51115*4*
25222***
