Open7

Python初心者向け課題

おるとろおるとろ

初心者向け課題を書いていきます。挙動については対話モードなどで確認すると便利かと思います。
なお、環境についてはWSL環境(Ubuntu)を想定しています。

対話モードの起動

コンソールで python (WSL環境では python3 ) コマンドを使用すると、入力したpythonのコードを逐一実行してくれる対話モードが起動します。

変数の宣言や代入、評価、式や関数の実行、forやwhileを使った反復など、様々なコードを実行することができ、とても便利です。

対話モードを終了するには Ctrl + D を使用します。

おるとろおるとろ

スクリプトの実行

ある程度まとまった処理を書くには対話モードよりも、テキストにまとめた方がいいでしょう。以下のコマンドでスクリプトを実行することができます。

python3 スクリプト名.py

文法確認課題

既に他の言語をある程度扱えて、変数、関数、if、for、配列、オブジェクトといった用語に慣れている場合は文法を調べながら以下の課題を解いてください。完全に初心者の方の場合は、まずは入門テキストなどを通読するか、チュートリアル動画を見ることをお勧めします。

精確な資料はこちらの公式ドキュメントを活用するといいと思います。
https://docs.python.org/ja/3/

おるとろおるとろ

関数

以下の関数を定義してください。

  1. 引数を二つとり、それらの積を返す関数
  2. 引数を二つとり、それらの剰余を返す関数
  3. 引数を一つとり、その引数を引数の数だけべき乗する関数
  4. 引数として「引数を1つとる関数」と「数値」をとり、「引数を1つとる関数」に「数値」を与えて実行した結果を返す関数
回答例
def mul(a, b):
    return a*b
def mod(a, b):
    return a % b
def exp(a):
    return a**a
def apply(a, b):
    return a(b)


expをapplyした様子

おるとろおるとろ

タプル、辞書、配列、集合

  1. 要素はなんでもいいので、タプルを書いてください。また、タプルの最初の要素にアクセスする方法を書いてください。
  2. 同じく、辞書とその要素にアクセスする方法を書いてください。
  3. 同じく、配列とその要素にアクセスする方法を書いてください。
  4. 同じく、集合を2つ書いてください。また、それらの和集合を演算で求めてください。
回答例
a = (1, 3)
a[0] # => 1
b = {"apple":1, "orange":2, "banana":3}
b["apple"] # => 1
c = ["boo", "hoge", "bar"]
c[1] # => "hoge"
d = {1, 2, 2, 4} # 集合では重複は無視される
e = {4, 5, 7, 9}
d | e # => {1, 2, 4, 5, 7, 9}
おるとろおるとろ

文字列

  1. 二つの文字列を結合する処理を書いて下さい。
  2. 文字列中に数値を埋め込む処理を書いてください。
回答例
s = 'pyth' + 'on'
print(s) # => python
a = 365
s = "一年は{}日です".format(a)
print(s) # => 一年は365日です
おるとろおるとろ

構造化

  1. 1から100まで足し合わせる処理を書いてください。
  2. 1から100まで足し合わせるが、5の倍数のときは掛け合わせる処理を書いてください。
  3. 1から100まで足し合わせるが、5の倍数のときは掛け合わせていき、20000000を超えたタイミングで中断し、中断したときの数値を表示する処理を書いてください。
回答例
sum = 0
for num in range(100):
    sum = sum + num

print(sum)
sum = 0
for num in range(100):
    if  num % 5 == 0:
        sum = sum * num
    else:
        sum = sum + num

print(sum)
sum = 0
for num in range(100):
    if  num % 5 == 0:
        sum = sum * num
    else:
        sum = sum + num
    if sum > 20000000:
        print(num)
        break

print(sum)

データ操作

配列ary = [1,2,3,4,5,6,7,8,9,10]に対して

  1. 配列の全ての要素を文字列に変える処理を書いてください。
  2. 配列の先頭から二つずつ要素を取り出し、その二つの要素を持つタプルとし、それらのタプルを要素として持つ配列を作成する処理を書いてください。
回答例
list(map(str, ary))
# イテレーターを使う
it = iter(ary)
ret = []
while True:
    try:
        ret.append((next(it), next(it)))
    except StopIteration:
        print(ret)
        break
おるとろおるとろ

競技プログラミングに挑戦

ある程度文法が入ったら、こちらの課題に挑戦してみましょう。ログイン後、問題タブで問題を、提出タブで回答コードを提出することが出来ます。11問あるので、解いてみましょう。C問題に関しては結構難しいかもしれないので、場合によっては他の人の回答を見ても勉強になると思います。
https://atcoder.jp/contests/abs

Python3で標準入力を受け取るには

input()メソッドを使います。Atcoderよりコード例を引用します。

# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

ローカル環境で入力データを読み込ませる

スクリプト実行時に、テキストデータを標準入力として与えることができます。例えば、sample.txtにデータを、main.pyにそれを受け取るスクリプトを用意するとこのようになります。

sample.txt
1
2
main.py
print(input())
print(input() + " received")
python3 main.py < sample.txt
# 以下のような出力がでる
# 1
# 2  received