Pythonプログラミング入門演習課題

Tweet


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 倍


HP

完成品のソースコードの分量の目安:約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***


もどる