見出し画像

退屈なことをPythonにやってもらうための演習の回答[5.6][6.7][7.18.1][7.18.2]

白地です。

今日もやったので書いてみます。休みなので進みが良いですね。

5.6 ファンタジーゲームの持ち物リストへリストから辞書に移す

def display_investory(investory):
    print('持ち物リスト:')
    item_total = 0
    for k, v in investory.items():
        print( str(v) + ' ' + str(k) )
        item_total += v
    print('アイテム総数:' + str(item_total))

#stuff = {'ロープ': 1,'たいまつ': 6, '金貨': 42, '手裏剣': 1, '矢': 12 }
#display_investory(stuff)

def add_to_investory(investory, added_items):
    for i in added_items:
        investory.setdefault( i, 0 )
        investory[i] += 1
    return investory

inv = { '金貨':42, 'ローブ':1 }
dragon_loot = ['金貨', '手裏剣', '金貨', '金貨', 'ルビー']

inv = add_to_investory( inv,dragon_loot )

display_investory(inv)

1と2の解答をいっぺんに。例で上がっていたものを転用するのでそこまで悩みませんでした。

持ち物リストの表示はjoin使っても良いのかもしれないですが、あまり変わらないですよね…

6.7 表の表示

def print_table(list):

    length = []
    display = []

    for x in range(len(list)):
        length.append(0)
        for y in range(len(list[x])):
            if length[x] < len(list[x][y]):
                length[x] = len(list[x][y])

    for y in range(len(list[x])):
        display.append("")

    for x in range(len(list)):
        for y in range(len(list[x])):
            list[x][y] = list[x][y].rjust(length[x])
    
    for x in range(len(list)):
        for y in range(len(list[x])):
            if x==0:
                display[y]=display[y]+list[x][y]
            else:
                display[y]=display[y]+' '+list[x][y]

    for y in range(len(display)):
        tmp = ""
        tmp = ''.join(display[y])
        print(tmp)

table_data =[['apples', 'oranges', 'cherries', 'bananas'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

print_table(table_data)

リストでなんとかしようパート2ですね。。。

7.18.1 強いパスワードの検出

import re

def check_pass_strength(word):

    if (len(word)) < 8 :
        return False

    regex1 = re.compile('[a-z]')
    regex2 = re.compile('[A-Z]')
    regex3 = re.compile('[0-9]')

    if (regex1.search(word) == None):
        return False

    if (regex2.search(word) == None):
        return False

    if (regex3.search(word) == None):
        return False

    return True

なんか、もっとキレイな書き方があるかもしれないです。

7.18.2 正規表現を用いたstrip()メソッド

def fake_strip(word, option=None):
    word = word.strip(option)
    return word

…冗談です。

import re

def fake_strip(word, option=None):
    if option == None:
        option = '\\s*'

    regex1 = re.compile('^'+option)
    regex2 = re.compile(option+'$')
    word = regex1.sub('',word)
    word = regex2.sub('',word)
    return word

入力された単語をチェックなしに使っちゃいますが、とりあえず勉強としてはひとまずこれで…

この記事が気に入ったらサポートをしてみませんか?