Python学習-5週目の授業の宿題


9-3ユーザー:属性first_を含むUserというクラスを作成します.nameとlast_name、およびユーザープロフィールが通常格納される他のいくつかの属性もあります.クラスUserでdescribeという名前を定義します.user()の方法で、ユーザー情報の要約を印刷します.greetという名前をもう一つ定義します.user()の方法で、ユーザーに個性的な挨拶をします.9-5ログイン試行回数:練習を完了するために作成されたUserクラスにlogin_という名前を追加attemptsのプロパティ.incrementという名前の作成login_attempts()のメソッドで、属性login_attemptsの値に1を加算します.resetという名前をもう一つ書きますlogin_attempts()のメソッドで、属性login_attemptsの値は0にリセットされます.9-7管理者:管理者は特別なユーザーです.Adminという名前のクラスを作成し、練習9-3または練習9-5を完了するために作成したUserクラスを継承させます.「can add post」、「can delete post」、「can ban user」などの文字列からなるリストを格納するprivilegesという属性を追加します.showという名前のprivileges()のメソッドで、管理者の権限が表示されます.
class User:
    def __init__(self, _id, first_name, last_name):
        self.id = _id
        self.first_name = first_name
        self.last_name = last_name
        self.login_attempts = 0

    def describe_user(self):
        print('User\'s ID: %d' % (self.id))
        print('User\'s name: %s' % (self.first_name + ' ' + self.last_name))

    def greet_user(self):
        print('Hello %s' % (self.first_name + ' ' + self.last_name))

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0

class Admin(User):
    def __init__(self, _id, first_name, last_name):
        super().__init__(_id, first_name, last_name)
        self.privileges = ['can add post', 'can delete post', 'can ban user']

    def show_privileges(self):
        for privilege in self.privileges:
            print(privilege)

10-3訪問者:プログラムを作成し、ユーザーに名前を入力するように促す.ユーザが応答すると、その名前をファイルguestに書き込む.txtで.
name = input('Please input guest\'s name: ')
with open('guest.txt', 'w') as fw:
    fw.write(name)

10−6加算:ユーザに数値入力を要求すると、ユーザが数値ではなくテキストを提供するという問題がよく発生する.この場合、入力を整数に変換しようとすると、TypeError異常が発生します.プログラムを作成し、ユーザーに2つの数字を入力してから、それらを加算して結果を印刷するように要求します.ユーザーが入力した値が数値でない場合は、TypeError例外をキャプチャし、友好的なエラーメッセージを印刷します.
try:
    a, b = map(int, input('Please input two integers: ').split())
except ValueError:
    print('At least one of your inputs are not integers')
else:
    print(a + b)

11-3従業員:名前、姓、年俸をinit()で受け入れ、属性に格納するEmployeeというクラスを作成します.giveという名前のraise()の方法では、デフォルトで年俸を5000ドル増加しますが、他の年俸増加量も受け入れることができます.Employeeのテスト・インスタンスを作成します.テスト・メソッドはtest_give_default_raise()とtest_give_custom_raise() .メソッドsetUp()を使用して、各テストメソッドに新しい従業員インスタンスが作成されないようにします.このテスト例を実行して、両方のテストが合格したことを確認します.
class Employee:
    def __init__(self, first_name, last_name, salary):
        self.first_name = first_name
        self.last_name = last_name
        self.salary = salary

    def give_raise(self, raise_salary=5000):
        self.salary += raise_salary

import unittest
class EmployeeTest(unittest.TestCase):
    def setUp(self):
        self.employee = Employee('Petyr', 'Baelish', 20000)

    def test_give_default_raise(self):
        self.employee.give_raise()
        self.assertEqual(self.employee.salary, 25000)

    def test_give_custom_raise(self):
        self.employee.give_raise(10000)
        self.assertEqual(self.employee.salary, 30000)