2019年度テスト

本番のテストと同じ形式で、模擬テストを2020年1月29日(水)に実施します。

日程と場所

  • 2020年2月5日(水)

  • 場所: 総合校舎1号館(G1)5F演習室

注意事項

  • 問題は紙で配布します。

  • 持ち込みPCで試験を受けることはできません。必ず教室備え付けのPCのみを使っ てください。自分の使いたいキーボードがある場合、持参して使ってかまいません。

  • PyCharmにヒントとなるこれまで作成したプログラムを入れておいて問題あり ません。持ち込みPCで講義を受けていた学生は、教室備え付けのPCにファイ ルを移動しておく必要があります。

  • 試験中に使用できるソフトウェアはPyCharmとVESTAのみです。ブラウザ等の 他のソフトウェアを起動した場合、不正行為となります。

  • 通信機能がなければ、何を持ち込んでもらってもかまいません。スマホは鞄 等にしまっておきます。

  • 試験終了の時間になったら、作成したプログラムをブラウザでuploadして提出します。 これまでの課題と同じように「18TXXXXA-Q1」のようなファイル名での提出 になります。uploadで戸惑わないようファイル名の規則を守ってプログラム を作成してください。

成績評価の内訳

出席やレポートも加味して成績評価を行いますが目安は以下のとおりです。テ スト結果を重視します。

項目

点数

出席

15 \(\pm\) 10

課題

15 \(\pm\) 10

テスト

70 \(\pm\) 10

救済措置

評価が30点以上で60点未満の場合、追試を受けることができます。30点未満の 場合は、追試なしで不可になります。追試で合格すれば60点とします。

模擬テスト解答例

Q1.py
s = []
for i in range(1000, 10001, 1):
    if (i % 8 == 0) and (i % 9 == 0) and str(i).find("9") != -1:
        s.append(i)
ave = sum(s)/len(s)
print("3条件を満たす数の平均値: {:.2f}".format(ave))
Q2.py
body = open("chiba-wikipedia.txt", encoding="utf-8").read()
body = body.replace("\n", "")
n = 0
for i, v in enumerate(body[:-1]):
    if body[i:i+2] == "千葉":
        n += 1
print("千葉の出現回数: {}回".format(n))
# print(body.count("千葉"))
Q3.py (同点3位が複数います)
lines = open("score.csv", encoding="cp932").readlines()
grade = {}
grade["grade01"] = []
grade["grade02"] = []
grade["grade03"] = []
for line in lines[1:]:
    data = line.strip().split(",")
    data[1] = float(data[1])  # gpa
    data[2] = float(data[2])  # gp
    if data[1] >= 3.0:
        grade["grade01"].append(data)
    if 2.0 <= data[1] and data[1] < 3.0:
        grade["grade02"].append(data)
    if data[1] < 2.0:
        grade["grade03"].append(data)


def sort_key(v):
    return(v[1])


for k, v in grade.items():
    v.sort(key=sort_key)
    print("{}:".format(k))
    for i, p in enumerate(range(1, 4)):
        name = v[-p][0]
        gpa = v[-p][1]
        print("{}. {}({})".format(i+1, name, gpa))


# こちらの方が早い別解
# import numpy as np
# print("-"*60)
# for k, v in grade.items():
#     d = np.array(v, dtype=object)
#     idx = np.argsort(d[:, 1])[::-1]
#     print("{}:".format(k))
#     for i, dd in enumerate(d[idx[:3]]):
#         print("{}. {}({:<.2f})".format(i+1, dd[0], dd[1]))
Q4.py
CH4 = """
H  2.00000000 0.00000000 0.00000000
H  3.25515949 1.25515949 0.00000000
H  3.25515949 0.00000000 1.25515949
H  2.00000000 1.25515949 1.25515949
C  2.62757974 0.62757974 0.62757974
"""


def output(xyzfile, data):
    o = open(xyzfile, "w")
    o.write("{}\n\n".format(len(data)))
    for d in data:
        o.write("{} {} {} {}\n".format(d[0], d[1], d[2], d[3]))
    print(xyzfile, "was created.")


"""
プログラムを追加する
"""
CF4 = []
lines = CH4.strip().split("\n")
for line in lines:
    data = line.split()
    if data[0] == "H":
        data[0] = "F"
    CF4.append(data)
output("CF4.xyz", CF4)
Q5.py
import numpy as np


def getdata(infile):
    data = np.loadtxt(infile, skiprows=2, dtype=object)
    data[:, 1:4] = data[:, 1:4].astype(float)
    return data


def outxyz(outfile, data):
    o = open(outfile, "w")
    o.write("{}\n\n".format(data.shape[0]))
    for d in data:
        o.write("{} {} {} {}\n".format(d[0], d[1], d[2], d[3]))
    print(outfile, "was created.")


data = getdata("atoms.xyz")
Ar = data[data[:, 0] == "Ar", :]
r = np.sqrt(np.sum(Ar[:, 1:3]**2, axis=1).astype(float))
Ar_ = Ar[r < 30.0, :]
outxyz("cylinder.xyz", Ar_)
Q6.py
import numpy as np


def getdata(infile):
    data = np.loadtxt(infile, skiprows=2, dtype=object)
    data[:, 1:4] = data[:, 1:4].astype(float)
    return data


data = getdata("atoms.xyz")
Ar = data[data[:, 0] == "Ar", 1:4].astype(float)
He = data[data[:, 0] == "He", 1:4].astype(float)

rdata = []
for i, a in enumerate(Ar):
    r = np.sqrt(np.sum((He[:, 0:3] - a[0:3])**2, axis=1))
    idx = np.argmin(r)
    rdata.append([i, idx, r[idx]])
rdata = np.array(rdata, dtype=object)
rdata[:, 0:2] = rdata[:, 0:2].astype(int)
idx = np.argmin(rdata[:, 2])
i, j, r = rdata[idx]
print("Ar: [{:.4f} {:.4f} {:.4f}] ".format(Ar[i, 0], Ar[i, 1], Ar[i, 2]))
print("He: [{:.4f} {:.4f} {:.4f}] ".format(He[j, 0], He[j, 1], He[j, 2]))
print("Distance: {:.4f}".format(r))

評価結果

評点は181点満点です(100点以上はすべて100点です)。テストの配点は次のとおりです。

問題

配点

Q1

20点

Q2

20点

Q3

20点

Q4

20点

Q5

30点

Q6

40点

追試は、テスト問題を解答して提出してください。追試の学生には個別にメー ルしています。

../_images/score.jpg

指摘があり少数の丸めで「良」のところを「可」と表示していました。成績は 点数入力なので、正直、私の表示はどうでも良いのですが丸めた点で秀優良可 を表示する修正しました。