检查以下代码为什么报错:#创建函数,设置first_name,last_name,middle_name三个形参,其中middle_name默认值为空值 def name(first_name,last_name,middle_name=None): #如果middle_name为true if middle_name: full_name=f"{first_name} {middle_name} {last_name}" #否则 else: full_name=f"{first_name} {last_name}" #返回完整姓名 return full_name #循环 true while True: print("Please tell me your first name and last name") print("Enter 'exit' to exit the program") f_name=input("first name:") if f_name == 'exit': break m_name=input("middle_name:") l_name=input("last_name:") ex=input("Do you want to exit now(exit/no):") if ex == 'exit': break lover = name(f_name,l_name,m_name=None) print(f"hello {lover}")
时间: 2024-02-16 09:02:10 浏览: 104
代码中报错的原因是因为在调用函数 `name()` 时,将 `m_name` 参数指定为了 `None`,导致 `middle_name` 的默认值无法生效。你可以将代码中的 `lover = name(f_name,l_name,m_name=None)` 改为 `lover = name(f_name,l_name,m_name)`,即可正常运行。
相关问题
class Person: def __init__(self, name, weight): # 在初始化方法中增加两个参数由外界传递 # self.属性 = 形参 self.name = name self.weight = weight def __str__(self): return '我的名字叫 %s 体重是 %.2f' % (self.name, self.weight) def run(self): # pass print ('{}爱跑步'.format(self.name)) # 在对象方法的内部,是可以直接访问对象的属性 self.weight -= 0.5 def eat(self): #pass Print('{}吃东西'.format(self.name)) self.weight += 1 xiaoming = Person('小明',75.5) xiaoming.run() xiaoming.eat() print(xiaoming) xiaomei = Person('小美',45.0) xiaomei.eat() xiaomei.run() print(xiaomei)
这段代码定义了一个名为 Person 的类,并创建了两个实例 xiaoming 和 xiaomei。每个实例都有一个名字和体重属性,并且有两个方法:run() 和 eat()。run() 方法会让实例的体重减少0.5,eat() 方法会让实例的体重增加1。最后,通过 print() 函数打印出了两个实例的信息。运行结果如下:
小明爱跑步
小明吃东西
我的名字叫 小明 体重是 76.00
小美吃东西
小美爱跑步
我的名字叫 小美 体重是 46.00
//类模板 template<class name_type,class age_type> //名字类型和年龄类型 原来都是一个T 现在有俩了 class person { public: person(name_type name,age_type age)//有参构造 { this->m_name = name; this->m_age = age; } void show_person() { cout << "name = :" << this->m_name << endl; cout << "age = :" << this->m_age << endl; } name_type m_name; age_type m_age; }; void test01()//测试使用类模板 { //通过类模板创建实例化对象 把类型参数化 person<string, int> p1("凯文", 25);//string int 传入name_type age_type //凯文 25 实参传给有参构造的形参name age了 p1.show_person(); } int main() { test01();
这段代码演示了一个类模板的使用。类模板允许我们创建可以在不同类型上工作的通用类。
在这个例子中,我们定义了一个名为`person`的类模板。它有两个类型参数:`name_type`和`age_type`,分别表示名字的类型和年龄的类型。
在类模板中,我们定义了一个具有两个参数的构造函数,用于初始化名字和年龄成员变量。然后我们定义了一个`show_person()`函数用于显示名字和年龄。
在`test01()`函数中,我们使用类模板创建了一个实例化对象`p1`。我们通过将`string`和`int`作为类型参数传递给类模板,将具体的名字类型和年龄类型实例化为`person<string, int>`。然后我们调用了`show_person()`函数来显示名字和年龄。
最后,在`main()`函数中调用了`test01()`来测试类模板的使用。
注意,类模板只是一个模板,它不会在编译时生成实际的代码。实际的代码会在使用类模板创建对象时进行实例化。所以,在编译时并不会有问题,但在运行时可能会引发错误,例如传递了错误的类型参数。
阅读全文