Pythonの学習を始めた人のための初級問題集です。今回はランダムとリストを演習します。
ダイス1
サイコロを指定回数ふってその目の合計値を求める処理を作成せよ。
実行例
サイコロを何回ふる?>>6 [4, 2, 2, 2, 5, 3] 合計は 18 でした
import random
num=int(input('サイコロを何回ふる?>>'))
dices=[random.randint(1,6) for _ in range(num)]
print(dices)
print('合計は',sum(dices),'でした')
ダイス2
サイコロを指定回数ぶんふって、出た目を表示したのち出た目の種類を表示する処理を作成せよ。
実行例
サイコロを何回ふる?>>10 [3, 6, 3, 5, 2, 2, 4, 5, 5, 6] 出た目は {2, 3, 4, 5, 6} の 5 種類
import random
num=int(input('サイコロを何回ふる?>>'))
dices=[random.randint(1,6) for _ in range(num)]
print(dices)
print('出た目は',set(dices),'の',len(set(dices)),'種類')
ランダム降順並び替え
100~1000の範囲の偶数をランダムに指定個数生成し、それを降順に出力する
実行例
100~1000の範囲の偶数をいくつ生成する>>5 5 個生成しました!降順に表示します [978, 470, 452, 420, 132]
お役立ち情報
○random.randrangeを使うと乱数の生成に制限をつけられる
import random
n1=random.randrange(10,50,2) # 10-50未満の範囲の偶数(50を含まないので注意)
n2=random.randrange(10,100,7) # 10-100未満の[10,17,24....94]の中から抽選
○リスト.sort()で配列をソートできる
l1=[3,1,5,4]
l1.sort() # [1,3,4,5] l1自体を書き換える
l1.sort(reverse=True) #引数を与えて降順
#参考
l1=[3,1,5,4]
l2=sorted(l1) #l1はそのままにソートした新しいリストを作る
l3=sorted(l1,reverse=True) #l1はそのままに降順に並べた新しいリストをつくる
import random
num=int(input('100~1000の範囲の偶数をいくつ生成する>>'))
data=[random.randrange(100,1000,2) for _ in range(num)]
data.sort(reverse=True)
print(num,'個生成しました!降順に表示します',data)
じゃんけん
以下の実行例となるようなじゃんけんゲームを作成せよ。
PCの手はランダムとし、あいこの場合は決着がつくまで行うものとする
実行例
手を入力[0:グー,1:チョキ,2:パー]>>0 あなたはグー,PCはグー あいこ 手を入力[0:グー,1:チョキ,2:パー]>>1 あなたはチョキ,PCはパー あなたの勝ち
import random
while True:
user=int(input('手を入力[0:グー,1:チョキ,2:パー]>>'))
pc=random.randint(0,2)
hands=['グー','チョキ','パー']
print(f'あなたは{hands[user]},PCは{hands[pc]}')
if user==pc:
print('あいこ')
continue
if (user+3-pc)%3==1 :
print('あなたの負け')
else:
print('あなたの勝ち')
break
ボールゲーム
1~99の番号のついたボールが計99個入っている袋がある。
その中から2人が交互にボールを取り出し大きい数を引いた方が勝ちとなる。
ゲームは5回戦で競う。
なお、取り出したボールは袋に戻さないものとする(同じボールを二度ひくことはない)
実行例
1回戦 A:62,B:9…Aの勝ち 2回戦 A:41,B:76…Bの勝ち 3回戦 A:79,B:27…Aの勝ち 4回戦 A:36,B:34…Aの勝ち 5回戦 A:96,B:71…Aの勝ち 4対1でAの勝ち
お役立ち情報
○listのシャッフルは以下で行える
import random
l=[1,2,3]
random.shuffle(l)
○リストをpopすることで要素を取り出せる
l=[1,2,3,4,5]
n1=l.pop() # リストが[1,2,3,4]となり戻り値は5
n2=l.pop(1) # index1を取り出しはリストは[1,3,4]になる戻り値は2
○最大値、最小値はmax,minでわかる
min(3,5) #->3 max(10,1,4) #->10 max([1,2,3]) #->3
import random
GAME_COUNT=5
balls=list(range(1,100))
random.shuffle(balls)
awin=bwin=0
for i in range(GAME_COUNT):
print(f'{i+1}回戦')
a,b=balls.pop(),balls.pop()
if a>b:awin+=1;winner='A'
else:bwin+=1;winner='B'
print(f'A:{a},B:{b}...{winner}の勝ち')
print('{}対{}で{}の勝ち'.format(max(awin,bwin),min(awin,bwin),'A' if awin > bwin else 'B'))
コメント