---
# System prepended metadata

title: Python - Fuction(2) - Exercise
tags: [Python HomeWork]

---

# Python - Fuction(2) - Exercise
###### tags: `Python HomeWork`
**例**：着ぐるみのバイトの求人には幾つの条件があります。特に着ぐるみ自体の大きさが決まっているので身長制限があります。とある会社の求人には、160センチ以下が好ましいと書いていて、もし153センチの杏奈が応募したら果たしてTrueなのかFalseなのか、プログラミングで出力してください。
```
杏奈の身長を表す変数を利用して比較してください
annaHigh = 153

出力例：
True
```
:::info
code:
```python=
annaHigh = 153
print( annaHigh <= 160 )
```
答え：
![](https://i.imgur.com/SM2qRLJ.png)
:::
        
--------------------------------------------
## 問1：Hangman
「**Hangman**」の課題を参照し、
「**Step4**」のコードを、関数ありのバージョンに書き換えてください。

**入出例は以下の実行例から確認してください**
[最終結果(実行例)](https://replit.com/@eclairsameal/Hangman#main.py)

:::info
Code:
```python=
import random
stages = ['''
  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
  |   |
      |
      |
=========
''', '''
  +---+
  |   |
  O   |
      |
      |
      |
=========
''', '''
  +---+
  |   |
      |
      |
      |
      |
=========
''']

word_list = [
'abruptly', 
'absurd', 
'abyss', 
'affix', 
'askew', 
'avenue', 
'awkward', 
'axiom', 
'azure', 
'bagpipes', 
'bandwagon', 
'banjo', 
'bayou', 
'beekeeper', 
'bikini', 
'blitz', 
'blizzard', 
'boggle', 
'bookworm', 
'boxcar', 
'boxful', 
'buckaroo', 
'buffalo', 
'buffoon', 
'buxom', 
'buzzard', 
'buzzing', 
'buzzwords', 
'caliph', 
'cobweb', 
'cockiness', 
'croquet', 
'crypt', 
'curacao', 
'cycle', 
'daiquiri', 
'dirndl', 
'disavow', 
'dizzying', 
'duplex', 
'dwarves', 
'embezzle', 
'equip', 
'espionage', 
'euouae', 
'exodus', 
'faking', 
'fishhook', 
'fixable', 
'fjord', 
'flapjack', 
'flopping', 
'fluffiness', 
'flyby', 
'foxglove', 
'frazzled', 
'frizzled', 
'fuchsia', 
'funny', 
'gabby', 
'galaxy', 
'galvanize', 
'gazebo', 
'giaour', 
'gizmo', 
'glowworm', 
'glyph', 
'gnarly', 
'gnostic', 
'gossip', 
'grogginess', 
'haiku', 
'haphazard', 
'hyphen', 
'iatrogenic', 
'icebox', 
'injury', 
'ivory', 
'ivy', 
'jackpot', 
'jaundice', 
'jawbreaker', 
'jaywalk', 
'jazziest', 
'jazzy', 
'jelly', 
'jigsaw', 
'jinx', 
'jiujitsu', 
'jockey', 
'jogging', 
'joking', 
'jovial', 
'joyful', 
'juicy', 
'jukebox', 
'jumbo', 
'kayak', 
'kazoo', 
'keyhole', 
'khaki', 
'kilobyte', 
'kiosk', 
'kitsch', 
'kiwifruit', 
'klutz', 
'knapsack', 
'larynx', 
'lengths', 
'lucky', 
'luxury', 
'lymph', 
'marquis', 
'matrix', 
'megahertz', 
'microwave', 
'mnemonic', 
'mystify', 
'naphtha', 
'nightclub', 
'nowadays', 
'numbskull', 
'nymph', 
'onyx', 
'ovary', 
'oxidize', 
'oxygen', 
'pajama', 
'peekaboo', 
'phlegm', 
'pixel', 
'pizazz', 
'pneumonia', 
'polka', 
'pshaw', 
'psyche', 
'puppy', 
'puzzling', 
'quartz', 
'queue', 
'quips', 
'quixotic', 
'quiz', 
'quizzes', 
'quorum', 
'razzmatazz', 
'rhubarb', 
'rhythm', 
'rickshaw', 
'schnapps', 
'scratch', 
'shiv', 
'snazzy', 
'sphinx', 
'spritz', 
'squawk', 
'staff', 
'strength', 
'strengths', 
'stretch', 
'stronghold', 
'stymied', 
'subway', 
'swivel', 
'syndrome', 
'thriftless', 
'thumbscrew', 
'topaz', 
'transcript', 
'transgress', 
'transplant', 
'triphthong', 
'twelfth', 
'twelfths', 
'unknown', 
'unworthy', 
'unzip', 
'uptown', 
'vaporize', 
'vixen', 
'vodka', 
'voodoo', 
'vortex', 
'voyeurism', 
'walkway', 
'waltz', 
'wave', 
'wavy', 
'waxy', 
'wellspring', 
'wheezy', 
'whiskey', 
'whizzing', 
'whomever', 
'wimpy', 
'witchcraft', 
'wizard', 
'woozy', 
'wristwatch', 
'wyvern', 
'xylophone', 
'yachtsman', 
'yippee', 
'yoked', 
'youthful', 
'yummy', 
'zephyr', 
'zigzag', 
'zigzagging', 
'zilch', 
'zipper', 
'zodiac', 
'zombie', 
]
def create_list(chosen_word):
    display=[]
    for i in range(len(chosen_word)):
        display.append("_")
    return display

def prt_display(display):
    for i in display:
        print(i,end=" ")
    print()

def covert_To_alpha(chosen_word,guess,display):
    for i in range(len(chosen_word)):
        if chosen_word[i]==guess:
            display[i]=guess

def all_clear():
    return "_" not in display

lives = 6
chosen_word=random.choice(word_list)
print("Pssst, the solution is {}.".format(chosen_word))

display=create_list(chosen_word)
prt_display(display)

end_of_game = False
while not end_of_game:
    guess = input("guess a letter:")
    if not guess in chosen_word:
        lives -= 1
    else:
        covert_To_alpha(chosen_word,guess,display)
        
    if lives == 0:
        end_of_game = True
        print("You lose")
    print(stages[lives])
    prt_display(display)
    if all_clear():
        end_of_game = True
        print("You win")
```
結果：
![](https://i.imgur.com/YNp9KQT.png)
![](https://i.imgur.com/kpWxBd2.png)

:::
:::success
funcitonにまとめたが、**display()function**の機能を意識しましょう。
このfunctionは、新たなリストを作成し、リストを返すfunctionです。
293行目のエラーの原因は、[]で値を取ろうとしているが、
**displayはfunctionでリストではないからです**。

**解決法：**
まず、display functionを呼び出さないとアンダーバーが入っているリストがないので呼び出します。
```python=
display()
```
そして、作成したリストを使うには、returnしたリストを一つの変数に代入させなければなりません。
```python=
list_example = display()
```
returnしたものリストなので、[]で指定した位置の値を変更しましょう。
```python=
list_example[?] = ?
:::

## 問2：絵を描こう
悪魔召喚のとき「六芒星」を描きました。👿
今回は六芒星を描く際のコードを、
それぞれ「三角形」、「真ん中の三段」、「逆の三角形」といった関数にまとめましょう。

まとめたら、今度は何を描くかを入力できるようにします。
入力した番号に応じて、絵をかきましょう。

```
**入力出力例**：
0:Upper_tangle 1:Middle_tangle 2:Down_tangle 

What do you want to draw?21112

Input size:10
   *************
    ***********
     *********
      *******
       *****
        ***
         *
*******************
 *****************
*******************
*******************
 *****************
*******************
*******************
 *****************
*******************
   *************
    ***********
     *********
      *******
       *****
        ***
         *
         
**入力出力例**：
0:Upper_tangle 1:Middle_tangle 2:Down_tangle 

What do you want to draw?012210

Input size:5
    *
   ***
*********
 *******
*********
   ***
    *
   ***
    *
*********
 *******
*********
    *
   ***

```
:::info
code：
```python=
"""
def Upper_tangle(size):
    for i in range(size-3):
        for j in range(size-1-i):    
            print(" ", end = "")
        for k in range((i+1)*2-1):    
            print("*", end = "")
        print()

def Middle_tangle(size):
    for i in range(2*size-1):
        print("*", end = "")
    print("") 
    print("", end = "") 
    for i in range(1):
        for j in range(1):
            print(" ", end = "")
        for k in range(2*size-3):
            print("*", end = "")
    print()
    for i in range(2*size-1):
        print("*", end = "")
    print()

def Down_tangle(size):
    for i in range(size-3):
        for j in range(size-(size-3)+i):    
            print(" ", end = "")
        for k in range((size-3)*2-1-2*i):    
            print("*", end = "")
        print()

print("0:Upper_tangle 1:Middle_tangle 2:Down_tangle")
draw_num=int(input("What do you want to draw?"))
size=int(input("Input size:"))


#判断をしてprintするところで入力時に数字が連なっているため、
#ifを使って一つずつ判断できない。　draw_num(input)のところを
#文字列として新しいlistにいれ、for X in list　を行ってみたが、できなかった。
#最後の判断、printの方法が分かりませんでした。
"""

def Upper_tangle(size):
    for i in range(size-3):
        for j in range(size-1-i):    
            print(" ", end = "")
        for k in range((i+1)*2-1):    
            print("*", end = "")
        print()
       

def Middle_tangle(size):
    for i in range(2*size-1):
        print("*", end = "")
    print("") 
    print("", end = "") 
    for i in range(1):
        for j in range(1):
            print(" ", end = "")
        for k in range(2*size-3):
            print("*", end = "")
    print()
    for i in range(2*size-1):
        print("*", end = "")
    print()
    

def Down_tangle(size):
    for i in range(size-3):
        for j in range(size-(size-3)+i):    
            print(" ", end = "")
        for k in range((size-3)*2-1-2*i):    
            print("*", end = "")
        print()
       

title_list=["Upper_tangle","Middle_tangle","Down_tangle"]
for i in range(len(title_list)):
    print("{}:{}".format(i,title_list[i]),end=" ")
print()

draw_num=input("What do you want to draw?")
size=int(input("Input size:"))

for i in draw_num:
    chosen=int(i)
    if chosen==0:
        Upper_tangle(size)
    elif chosen==1:
        Middle_tangle(size)
    elif chosen==2:
        Down_tangle(size)

```
結果：
![](https://i.imgur.com/5lz93r9.png)

:::
:::success
33行目で入力した数値は、話した通り連なっています。
そこで、数値で判定するのではなく、文字列で判定を行いましょう。
```python=
#例えば：21112を入力した。
draw_num=input("What do you want to draw")
for i in draw_num:
    # ループごとに、2、1、1、1、2が順に文字列に代入される。
    print(i)
```
:::

## 問3：先週のやつ
# 関数のメリットを意識し、
# 「課題練習19　関数（１） 」のコードを書き換えてください。

完成した課題のhackMDのリンクを以下に貼り付けてください。

:::info
リンク：
https://hackmd.io/@Uo4w_vXTR2eMzZiBd7bdhw/rk_Sia6mF
:::
