# Python - random - Exercise ###### tags: `Python HomeWork` **例**:着ぐるみのバイトの求人には幾つの条件があります。特に着ぐるみ自体の大きさが決まっているので身長制限があります。とある会社の求人には、160センチ以下が好ましいと書いていて、もし153センチの杏奈が応募したら果たしてTrueなのかFalseなのか、プログラミングで出力してください。 ``` 杏奈の身長を表す変数を利用して比較してください annaHigh = 153 出力例: Ture ``` :::info code: ```python= annaHigh = 153 print( annaHigh <= 160 ) ``` 答え: ![](https://i.imgur.com/SM2qRLJ.png) ::: -------------------------------------------- ## 問1:乱数の王者と弱者 次のプログラムを作成してください。 乱数で1~100の整数を10個生成し出力表示させ、その中での最大値と最小値を表示させること。 ヒント:平均数値を小数点以下2桁まで表示する事 ``` 出力例: 79 27 45 39 4 21 4 46 23 20 AVERAFE = 30.80 MAX = 79 MIN = 4 ``` :::info code: ```python= import random total=0 MAX=1 MIN=100 for i in range(10): n=random.randint(1,100) print(n,end=" ") total+=n if MAX < n: MAX = n if MIN > n: MIN = n print( ) AVERAGE = total / 10 print("AVERAG = {:.2f}".format(AVERAGE)) print("MAX = {}".format(MAX)) print("MIN = {}".format(MIN)) ``` 結果: ![](https://i.imgur.com/uxBbr41.png) ::: ## 問2:Jackpot 数字を当てるゲーム「Jackpot」を作りましょう! **Ameria**: Hello!Everybody! これは二人で遊べるゲームだったけど、今回は一人で遊ぶゲームにして行きましょう。まず、乱数の範囲を自分で決められるようにして、その範囲からJackpotが生成されるようにしてください。もちろん、生成したらちゃんとプレイヤーに生成できたよ!と教えてあげてくださいね。また、今回のジャックポットは乱数なので、もし試しても当たらなかったときにJackpotの数字をプレイヤーに教えよう。その他は先週と一緒なので、やってみよー! ``` 入力例と出力例1: start:1 end:30 ジャックポットと数字範囲の設定が完了しました。 回数制限:3 「-----ゲーム開始-----」 1~30の数字から一つ選んでください 1回目:10 -------------------------- 10~30の数字から一つ選んでください 2回目:25 -------------------------- 25~30の数字から一つ選んでください 3回目:28 -------------------------- You lost..... jackpot is 30. 入力例と出力例2: start:1 end:3 ジャックポットと数字範囲の設定が完了しました。 回数制限:3 「-----ゲーム開始-----」 1~3の数字から一つ選んでください 1回目:2 -------------------------- 1~2の数字から一つ選んでください 2回目:1 Jackpot is 1. You win!! ``` :::info code: ```python= import random start=int(input("start:")) end=int(input("end:")) n=random.randint(start,end) print("ジャックポットと数字範囲の設定が完了しました。") limit = int(input("回数制限:")) print("「-----ゲーム開始-----」") for c in range(limit): print('{}~{}の数字から一つ選んでください'.format(start,end)) num=int(input(str(c+1)+"回目:")) if num<start or num>end: print("I told you enter a number from {} to {}!!".format(start,end)) elif num == n: print("Jackpot is {}. You win!!".format(n)) break elif num>n: end=num elif num<n: start=num print("--------------------------") else: print("You lost.....") print("jackpot is {}".format(n),end=".") ``` 結果: ![](https://i.imgur.com/5VTvyNd.png) ::: ## 問3:ガチャ とあるゲームのガチャの確率は以下の通りです。 | レアリティ | 排出確率 | | -------- | -------- | | 星3(SSR) | 3% | | 星2(SR) | 18% | | 星1( R ) | 79% | プログラムを実行すると、 * まず、引いたガチャの回数を表示します * 次に、1回 or 10回ガチャ or end が選択できます。 * 選択した回数により、ガチャを行い結果を出力します。 * ガチャは、一回300円かかります。 * ガチャを終了したらランク分けに出たキャラの数、全部引いた回数、総計金額を表示します。 ``` 入出力例1: すでに0回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |0 ★☆☆☆☆:R すでに1回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |1 ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R すでに11回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |2 全部で11回引きました。 総額:3,300円 SSR:0体 SR:0体 R:11体 入出力例2: すでに0回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |1 ★☆☆☆☆:R ★☆☆☆☆:R ★★★☆☆:SSR ★★★☆☆:SSR ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R すでに10回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |1 ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★★☆☆☆:SR ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R すでに20回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |1 ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R ★★☆☆☆:SR ★☆☆☆☆:R ★☆☆☆☆:R ★★☆☆☆:SR ★☆☆☆☆:R ★☆☆☆☆:R ★☆☆☆☆:R すでに30回引きました 0. 一回ガチャ、 1. 十連ガチャ、 2.end |2 全部で30回引きました。 総額:9,000円 SSR:2体 SR:3体 R:25体 ``` :::info code: ```python= """ import random money=0 total=0 SSR=0 SR=0 R=0 print("すでに0回引きました") print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) while select != 2: n = random.randint(1, 100) if select==0: money+=300 total+=1 if n <= 3: print("★★★☆☆:SSR") print( ) SSR+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) elif n <= 18: print("★★☆☆☆:SR") print( ) SR+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) else: print("★☆☆☆☆:R") print( ) R+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) elif select==1: money+=3000 total+=10 if n <= 3: print("★★★☆☆:SSR") print( ) SSR+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) elif n <= 18: print("★★☆☆☆:SR") print( ) SR+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) else: print("★☆☆☆☆:R") print( ) R+=1 print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=int(input("|")) else: print("全部で{}回引きました。".format(total)) print("総額:{:,}円".format(money)) print("SSR:{}体".format(SSR)) print("SR:{}体".format(SR)) print("R:{}体".format(R)) """ import random total=0 money=0 SSR=0 SR=0 R=0 while True: print("すでに{}回引きました".format(total)) print("0. 一回ガチャ、 1. 十連ガチャ、 2.end") select=input("|") if select=="0": total+=1 money+=300 n=random.random() if n<=0.03: SSR+=1 rarity="SSR" star="★"*3+"☆"*2 elif n<=0.21: SR+=1 rarity="SR" star="★"*2+"☆"*3 elif n<=1: R+=1 rarity="R" star="★"*1+"☆"*4 print(star,rarity,sep=":") elif select=="1": total+=10 money+=3000 for i in range(10): n=random.random() if n<=0.03: SSR+=1 rarity="SSR" star="★"*3+"☆"*2 elif n<=0.21: SR+=1 rarity="SR" star="★"*2+"☆"*3 elif n<=1: R+=1 rarity="R" star="★"*1+"☆"*4 print(star,rarity,sep=":") elif select=="2": break print() print("全部で{}回引きました。".format(total)) print("総額:{:,}円".format(money)) print("SSR:{}体".format(SSR)) print("SR:{}体".format(SR)) print("R:{}体".format(R)) ``` 結果: ![](https://i.imgur.com/MYVezG7.png) ::: ## 問4:君に決めて!!!! 今回はひたすらにペルソナ(モンスター)に攻撃できるプログラムを作ってみましょう。 **プログラム説明:** * プログラムを実行すると、以下の三体のペルソナからランダムに一体が出現します | 名前 | HP | | -------- | -------- | | アリス | 350 | | サタリエル | 500 | | スカアハ | 400 | * 出現したら、プレイヤーは技「死んでくれる?」を繰り出すか、技「逃げる」を選ぶことができます。そして、どの技にも命中率があります。命中率は以下の通りです。 | 技名 | 命中率 |威力| | -------- | --|--| | 死んでくれる| 70%|120-180ダメージ| | 逃げる  |50%|なし| * もし技「死んでくれる」を選んだら、野生のペルソナを攻撃し、HPを減らします。HPが0以下であればプレイヤーの勝ちです。もちろん、当たらない場合もあるのできちんと当たらなかったと伝えましょう。 * もし技「逃げる」を選んだら、50%の確率で逃げられます。逃げられたときと逃げられなかったときのメッセージが違うので確認してください ``` **入出力例1:** 野生のサタナエルが現れました どうしますか? 0.死んでくれる? 1.逃げる:0 サタナエルに167点ダメージを与えました。 残りHP:333 どうしますか? 0.死んでくれる? 1.逃げる:0 サタナエルに163点ダメージを与えました。 残りHP:170 どうしますか? 0.死んでくれる? 1.逃げる:0 サタナエルに129点ダメージを与えました。 残りHP:41 どうしますか? 0.死んでくれる? 1.逃げる:0 サタナエルに124点ダメージを与えました。 残りHP:-83 勝ちました **入出力例2:** 野生のスカアハが現れました どうしますか? 0.死んでくれる? 1.逃げる:0 スカアハに167点ダメージを与えました。 残りHP:233 どうしますか? 0.死んでくれる? 1.逃げる:0 うまく当たらなかった!! どうしますか? 0.死んでくれる? 1.逃げる:1 逃げられなかった! どうしますか? 0.死んでくれる? 1.逃げる:1 逃げた! ``` :::info code: ```python= """ import random Alice_1=350 Satariel_2=500 Scathach_3=400 HP=0 monster=random.randint(1,3) if monster == 1: print("野生のアリスが現れました") HP=Alice_1 elif monster == 2: print("野生のサタリエルが現れました") HP=Satariel_2 else: print("野生のスカアハが現れました") HP=Scathach_3 print("どうしますか?") while HP > 0: select=int(input("0.死んでくれる? 1.逃げる:")) if select == 0: attack=random.randint(1,100) if attack <= 30: print("うまく当たらなかった!!") print("どうしますか?") else: damage=random.randint(120,180) if monster==1: HP-=damage print("アリスに{}点ダメージを与えました。".format(damage)) elif monster==2: HP-=damage print("サタリエルに{}点ダメージを与えました。".format(damage)) else: HP-=damage print("スカアハに{}点ダメージを与えました。".format(damage)) print("残りHP:{}".format(HP)) if HP <= 0: continue print("どうしますか?") elif select == 1: run_away=random.randint(1,2) if run_away==1: print("逃げられなかった!") print("どうしますか?") else: print("逃げた!") break else: print("勝ちました") """ import random monster1="アリス" monster2="サタナエル" monster3="スカアハ" skill1="死んでくれる?" skill2="逃げる" monster=random.randint(0,2) if monster==0: mainMonster=monster1 mainMonsterHP=350 elif monster==1: mainMonster=monster2 mainMonsterHP=500 elif monster==2: mainMonster=monster3 mainMonsterHP=400 print("野生の"+mainMonster+"が現れました") while True: print("どうしますか?") select=input("0.{} 1.{}:".format(skill1, skill2)) attack=random.random() if select=="0": if attack>0.3: damage=random.randint(120,180) print("{}に{}点ダメージを与えました。".format(mainMonster,damage)) mainMonsterHP-=damage print("残りHP:{}".format(mainMonsterHP)) else: print("うまく当たらなかった!!") elif select=="1": if attack>0.5: print("逃げた!") break else: print("逃げられなかった!") if mainMonsterHP<=0: print("勝ちました") break ``` 結果: ![](https://i.imgur.com/gJknsyl.png) ::: ## 練習1 :::info code: ```python= import random n=random.randrange(5,11) print(n) ``` 結果: ![](https://i.imgur.com/UiPWuE0.png) ::: ## 練習2 :::info code: ```python= import random n=random.randint(1,100) print(n) ``` 結果: ![](https://i.imgur.com/qGQ7flP.png) ::: ## 練習3 :::info code: ```python= import random n=random.random() print(n) ``` 結果: ![](https://i.imgur.com/wTARNBD.png) ::: :::success 確率 ```python= import random # 10% -> ssr 1~ 10 # 20% -> sr 11 ~ 30 # 70% -> r 31~ 100 n = random.randint(1, 100) if n <= 10: print("ssr") elif n <= 30: print("sr") else: print("r") ``` :::