2017-03-19 11 views
2

私はこのクラスのstrメソッドをここで定義しようとしています。これにより、クラスのインスタンスが印刷されるときに、My name is ___という形式のものが印刷されます。私は大学で何年も働いており、私は__プログラムを書いています。正しいフレーズの下には印刷されていますが、正しい値は印刷されません。どんな助けもありがとう。インスタンスの印刷と書式設定

class Student(): 
def __init__(self, name, years_at_umich=1): 
    self.name = name 
    self.years_UM = years_at_umich 
    self.bonus_points = random.randrange(1000) 
    self.programs_written = 0 
def __str__(self): 
    return "My name is %s. I've been in college for %d years and I've written %d programs" \ 
     %(self.name, self.years_UM, self.programs_written) 
def shout(self, phrase_to_shout): 
    print phrase_to_shout 

def year_at_umich(self): 
    return self.years_UM 

def write_programs(self, progs=1): 
    self.programs_written += progs 
    return self.programs_written 

***切り抜いた値のテスト、現在はそれが唯一の学生のための最後のテストに合格だ4 ********

あなたは方法 __str__を実装する必要が
class Student_test(unittest.TestCase): 
    def test_student1(self): 
     student1 = Student("Lyra") 
     self.assertEqual(student1.__str__(),"My name is Lyra. I've been at UMich for 1 years and I've written 0 programs.") 
    def test_student2(self): 
     student2 = Student("Aisha") 
     student2.write_programs() 
     self.assertEqual(student2.__str__(),"My name is Aisha. I've been at UMich for 1 years and I've written 1 programs.") 
    def test_student3(self): 
     student3 = Student("Ali",3) 
     student3.write_programs(4) 
     self.assertEqual(student3.__str__(),"My name is Ali. I've been at UMich for 3 years and I've written 4 programs.") 
    def test_student4(self): 
     student4 = Student("Aja") 
    student4.write_programs(12) 
    self.assertEqual(student4.programs_written, 12) 
    student4.write_programs() 
    self.assertEqual(student4.programs_written,13) 
+0

あなたの '' shout''メソッドは '印刷されません' phrase_to_shout '私の名前は泥です' ''あなたが期待するように、文字列をフォーマットすることはありませんが、あなたの議論を上書きします。同様に、 '' year_at_umich''メソッドはフォーマットされた文字列を返しません。 – Tankobot

+0

この質問が文字列の書式設定に関するものではないと思われる場合は、可能な[duplicate](http://stackoverflow.com/questions/1535327/how-to-print-a-class-or-objects-of-class-using-print)代わりにインスタンスのカスタム文字列を印刷することに重点を置いています。 – Tankobot

答えて

0

を返します。役に立つかもしれません。例えば

>>>test_stu = Student("Mike") 
>>>print test_stu 

My name is Mike. I've been in college for 1 years and I've written 0 programs 
をそして、以下のリンクが役に立つことがあります:あなたが学生を印刷するとき

import random 
class Student(): 
    def __init__(self, name, years_at_umich=1): 
     self.name = name 
     self.years_UM = years_at_umich 
     self.bonus_points = random.randrange(1000) 
     self.programs_written = 0 

    def __str__(self): 
     return "My name is %s. I've been in college for %d years and I've written %d programs" \ 
      %(self.name, self.years_UM, self.programs_written) 

、あなたが表示されます

https://docs.python.org/2.7/reference/datamodel.html?highlight=mro#object.strDifference between str and repr in Python

+0

助けに感謝します。私のプログラムは、ほとんどの場合、動作しているようですが、正しい値を出力していません。私は元のコードを編集しています。もしそれが素晴らしいと思えるのであれば、私は元のコードを編集しました。 – Avery9115

+0

'return self.programs_written + progs'を' self.programs_written + = progs'に変更してください。これによりprogsがself.programs_writtenに追加されます。 – xiaoyi

+0

self.programs_written + = progsを返すように変更するトレースバックの構文が無効です。 – Avery9115

0

__repr__はクラスStudentです。あなたは自分のやり方で印刷するインスタンスが必要な場合は、__str__は十分です:

def __str__(self): 
     return "My name is {}. I've written {} programs".format(self.name, self.programs_written) 
0

あなたは、インスタンスを文字列に変換されるたびに呼び出され、クラスの__str__方法、定義することによってこれを行うことができます。

を私が正しくあなたを理解していれば
class Student(): 
    # insert the same init here 

    def shout(self): # we do not need to ask for name because 
         # we already have it stored in self.name 
     phrase = "My name is %." 
     return phrase % self.name # format the text before returning it 
     # it's also useful to return the string instead 
     # of immediately printing it in this case because 
     # we will use it later 

    def year_at_umich(self): 
     phrase = "I've been at umich for %s years" # do not modify the instance attribute 
     return phrase % self.years_UM # use it to format your phrase 

    def say_number_programs(self): # keeping in pattern with our previous methods 
     phrase = "I've written %s programs" 
     return phrase % self.programs_written 

    def __str__(self): 
     return '%s. %s and %s.' % (self.shout(),    # we can format the final string 
            self.year_at_munich(),  # during the str call 
            self.say_number_programs) 

st = Student('Bob') 

print st 

これは、__str__()

My name is Bob. I've been at umich for 1 year and I've written 0 programs.

1
class Student(): 
    def shout(num, word): 
    if num == 1: 
     phrase = "My name is %s" % word 
    elif num == 2: 
     phrase = "I love %s" % word 
    elif num == 3: 
     phrase = "My favorite food is %s" % word 
    return phrase 

    def years(num): 
    phrase = "I've been at umich for %s years" % num 
    return phrase 

    def programs(num): 
    phrase = "I've written %s programs" % num 
    return phrase 

Student.shout(1、 'マッド')

関連する問題