---
# System prepended metadata

title: Python - random - Exercise
tags: [Python HomeWork]

---

# 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：乱数の王者と弱者
次のプログラムを作成してください。
乱数で１～１００の整数を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の数字をプレイヤーに教えよう。その他は先週と一緒なので、やってみよー！


```
入力例と出力例１：
start:1

end:30
ジャックポットと数字範囲の設定が完了しました。

回数制限：3
「-----ゲーム開始-----」
1~30の数字から一つ選んでください

1回目：10
--------------------------
10~30の数字から一つ選んでください

2回目：25
--------------------------
25~30の数字から一つ選んでください

3回目：28
--------------------------
You lost.....
jackpot is 30.

入力例と出力例２：
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("すでに０回引きました")
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％の確率で逃げられます。逃げられたときと逃げられなかったときのメッセージが違うので確認してください



```
**入出力例１：**
野生のサタナエルが現れました
どうしますか？

0.死んでくれる？ 1.逃げる:0
サタナエルに167点ダメージを与えました。
残りHP:333
どうしますか？

0.死んでくれる？ 1.逃げる:0
サタナエルに163点ダメージを与えました。
残りHP:170
どうしますか？

0.死んでくれる？ 1.逃げる:0
サタナエルに129点ダメージを与えました。
残りHP:41
どうしますか？

0.死んでくれる？ 1.逃げる:0
サタナエルに124点ダメージを与えました。
残りHP:-83
勝ちました

**入出力例２：**

野生のスカアハが現れました
どうしますか？

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")
```
:::