Pythonの基本を学ぶプログラミング練習問題
(Pythonの基本を初めからしっかり学びたい方はこちら↓↓)
プログラミングの基本を学んだ方からよくこのような質問を頂きます。
悩むペン銀
Pythonの基本構文を学んで、プログラミングに対する基礎知識もある程度勉強したんだけど、次に何をすればいいのか分からない。次に何をすればより成長できるか教えて欲しい
こう言った『次に何すればいいか分からない』と言う疑問に対し、
僕からの回答を言うと、
『問題を沢山解きましょう』
です。
世の中には解決を待っている問題がたくさんあります。
例えば
事の大小はあれど、
少し考えただけでも身の回りに沢山の問題が溢れていることに気づくでしょう。
『こんなサービスあったらいいのにな。。』
プログラミングはこう言った問題解決に貢献できる力を持っています。
世界中で民泊を一般化する事に成功したAirbnbも、
こう言った現実問題を解決するためにできた企業の内の1つです。
現実問題に真剣に取り組み、自分でアイディアを考え、解決していくことが
プログラミング力飛躍的に向上させる一番の近道です。
本シリーズでは深く述べませんが、
例えばデータ分析関連の問題解決の場を提供しているkaggleでは企業が
お金を出してコンペを開いており、優勝者にはかなりの金額の賞金が授与されます。
学びを得ながら、お金も支給されるとても良い環境ですよね。
しかし、kaggleに提示される問題然り、現実問題に然り、
いきなり解決に取り組むには、初心者にとって難しく感じるでしょう。
なので、まずはPythonを上手く使いこなせるようになりましょう!
このステップを乗り越えて現実問題に取り組む事を真の目的にセットすると良いです。
具体的にこのシリーズではPythonプログラミングの基礎を勉強した初心者の方向けに、
レベル別に分割した『基礎力を固める練習問題』を提供していきます。
このシリーズを最後まで学習することで、これまで学んできた基礎知識を定着させ、
最終的に様々な問題をPythonを駆使して解決できるようになるはずです。
本シリーズを習得した後、
得ることができる主な知識・内容は以下4点です。
本記事の内容
この記事を書いている僕は国立大学にてCSの学位を保有しており
エンジニアとしての仕事では現実問題を解き続けています。
実際に問題を解いていくと今まで知らなかった便利な組み込み関数や
新しい思考プロセスを学ぶことができます。
それではやっていきましょう。
目次
【問題1】複数の型変換 レベル: 普通
【問】引数で渡されたリスト内の全ての要素を以下の規則に従い、変換する関数を作成せよ。
ルール
以下の規則に従った関数convert_elements関数を作成してください。
具体例
作成したconvert_elements関数に引数を与えた時、
結果は以下のようになります。
注意事項
以下の要点を満たすような設計を行います。
テスト
以下のテストコードをエラー無く通過できれば正解です。
あなたの回答を書き込んで関数を完成させ、確認してみましょう。
# This will get executed each time the exercise gets initialized
def convert_elements(arg):
#ここにコードを入力してください
return your_answer
assert convert_elements(['test','c',132,True]) == ['Test?','C?',264,False]
assert convert_elements([13,'12','twelve']) == [14,'12?','Twelve?']
assert convert_elements([False,'False','true']) == [True, 'False?','True?']
print("pass!")
.capitalize
をうまく使えると簡単かも?解答例
少なくとも10分間は自分の頭で考えて問題を解きましょう。
10分考えても解法が浮かばない場合は解答例を見て、問題の解き方を学んでください。
def convert_elements(lst):
result = []
for i in lst:
if type(i) is int:
if i%2 == 0:
result.append(i*2)
else:
result.append(i+1)
elif type(i) is str:
result.append(i.capitalize()+'?')
elif type(i) is bool:
result.append(not i)
return result
解説付き解答例
def convert_elements(lst):
result = []
for i in lst:
if type(i) is int: # 要素がint型(数値)である場合
if i%2 == 0: # 要素が偶数である場合(偶数を2で割ると余りが0)
result.append(i*2)
else:
result.append(i+1) # 要素が奇数である場合+1
elif type(i) is str: #要素がstr型(文字)である場合
result.append(i.capitalize()+'?') # 文字列の先頭を大文字に変換し、末尾に(+?)する
elif type(i) is bool: # 要素がbool型の場合
result.append(not i)
return result
【問題2】辞書操作 レベル:普通
【問】仕入れた商品の単価と販売した価格、売り上げた個数の情報等を含んだ辞書を受け取り、最終利益を計算する関数を作成せよ
ルール
以下の規則に従った関数calculate_profit関数を作成してください。
具体例
作成したcalculate_profit関数に引数を与えた時、
結果は以下のようになります。
calculate_profit({
'cost_price': 43.12,
'sell_price': 90.41,
'stock_number':2300,
'sold_number': 1900
}) → 72603
calculate_profit({
'cost_price': 11.99,
'sell_price': 43.00,
'stock_number':400,
'sold_number': 340
}) → 9824
calculate_profit({
'cost_price': 1.29,
'sell_price': 3.12,
'stock_number':1388,
'sold_number': 599
}) → 78
注意事項
利益の計算方法は以下の要点を満たすような設計を行います。
テスト
以下のテストコードをエラー無く通過できれば正解です。
あなたの回答を書き込んで関数を完成させ、確認してみましょう。
# This will get executed each time the exercise gets initialized
def calculate_profit(info):
#ここにコードを入力してください
return your_answer
assert calculate_profit({'cost_price': 12.33, 'sell_price': 89.03, 'stock_number':1433,'sold_number': 1200}) == 89167
assert calculate_profit({'cost_price': 3.13, 'sell_price': 8.19, 'stock_number':7433,'sold_number': 300}) == -20808
assert calculate_profit({'cost_price': 233.00, 'sell_price': 423.00, 'stock_number':4203,'sold_number': 3000}) == 289701
assert calculate_profit({'cost_price': 2.20, 'sell_price': 4.40, 'stock_number':1230,'sold_number': 809}) == 854
assert calculate_profit({'cost_price': 33.23, 'sell_price': 53.44, 'stock_number':8388,'sold_number': 3999}) == -65027
assert calculate_profit({'cost_price': 134.21, 'sell_price': 253.44, 'stock_number':438,'sold_number': 300}) == 17248
assert calculate_profit({'cost_price': 3.21, 'sell_price': 13.44, 'stock_number':442,'sold_number': 22}) == -1123
print("pass!")
解答例
少なくとも10分間は自分の頭で考えて問題を解きましょう。
10分考えても解法が浮かばない場合は解答例を見て、問題の解き方を学んでください。
def calculate_profit(info):
cost = info['cost_price']
sell = info['sell_price']
stock = info['stock_number']
sold = info['sold_number']
profit = sell*sold - cost*stock
return round(profit)
解説付き解答例
def calculate_profit(info):
cost = info['cost_price'] # 仕入れ値を格納
sell = info['sell_price'] # 売値を格納
stock = info['stock_number'] # 仕入れ個数を格納
sold = info['sold_number'] # 売った個数を格納
profit = sell*sold - cost*stock # 利益を算出
return round(profit)
【問題3】文字列操作による暗号化 レベル: 難しい
【問】引数として受け取った文字列を以下の手順に従って暗号化せよ
ルール
以下の規則に従った関数encrypt_string関数を作成してください。
具体例
作成したencrypt_string関数に引数を与えた時、
結果は以下のようになります。
encrypt_string("aaasd") → 'ds000text'
encrypt_string("blosisoos") → 's22sis2lbtext'
encrypt_string("eoullso133") → '3312sll321text'
注意事項
以下の要点を満たすような設計を行います。
テスト
以下のテストコードをエラー無く通過できれば正解です。
あなたの回答を書き込んで関数を完成させ、確認してみましょう。
# This will get executed each time the exercise gets initialized
def encrypt_string(arg):
#ここにコードを入力してください
return your_answer
assert encrypt_string("karaca") == "0c0r0ktext"
assert encrypt_string("burak") == "k0r3btext"
assert encrypt_string("banana") == "0n0n0btext"
assert encrypt_string("alpaca") == "0c0pl0text"
assert encrypt_string("hello") == "2ll1htext"
print("pass!")
reversed
やreplace
を上手に使うと簡単かも。。解答例
少なくとも10分間は自分の頭で考えて問題を解きましょう。
10分考えても解法が浮かばない場合は解答例を見て、問題の解き方を学んでください。
def encrypt_string(word):
reversed_list=list(reversed(word))
reversed_word=''.join(reversed_list)
replace_a=reversed_word.replace('a','0')
replace_e=replace_a.replace('e','1')
replace_o=replace_e.replace('o','2')
replace_u=replace_o.replace('u','3')
result = replace_u+'text'
return result
解説付き解答例
def encrypt_string(word):
reversed_list=list(reversed(word)) # 要素を逆順に並び替える
reversed_word=''.join(reversed_list) # つなげる
replace_a=reversed_word.replace('a','0') # 文字列を数値(文字列)に置き換える
replace_e=replace_a.replace('e','1')
replace_o=replace_e.replace('o','2')
replace_u=replace_o.replace('u','3')
result = replace_u+'text' #文末に'text'を付加する
return result
まとめ
問題を解いていく上で以下のようなプロセスを踏むのが普通です。
このように何度も現れる障壁を、諦めず乗り越え続けることで
これまで得られなかったかなり実践的な知識を得る機会に出会います。
裏を返せばこのような経験を避け続けてもプログラミングは上達しません。
是非、自発的に考え、行動し、積極的に取り組んでいきましょう。
問題集はこちら↓
人気記事 CS学位取得者がガチでプログラミングスクールを調査してみた件【おすすめのスクール】