第四天的第一题用到了对象和类,有难度,大家尽力去写,题目后面跟的为答案。
1、记录企业员工的信息,包括name,age,sex、address等特征。并且实现企业员工的信息增加,删除,显示员工全部信息。
class Employee:
def __init__(self, name, age, sex, address):
self.name = name
self.age = age
self.sex = sex
self.address = address
def __str__(self):
return f"Name: {self.name}, Age: {self.age}, Sex: {self.sex}, Address: {self.address}"
class EmployeeManagement:
def __init__(self):
self.employees = []
def add_employee(self, name, age, sex, address):
new_employee = Employee(name, age, sex, address)
self.employees.append(new_employee)
print(f"Employee {name} added successfully.")
def delete_employee(self, name):
for employee in self.employees:
if employee.name == name:
self.employees.remove(employee)
print(f"Employee {name} deleted successfully.")
return
print(f"Employee {name} not found.")
def display_employees(self):
if not self.employees:
print("No employees found.")
return
print("All employees:")
for employee in self.employees:
print(employee)
def main():
em = EmployeeManagement()
while True:
print("\nOptions: add, delete, display, quit")
option = input("Enter an option: ").strip().lower()
if option == "add":
name = input("Enter name: ").strip()
age = input("Enter age: ").strip()
sex = input("Enter sex: ").strip()
address = input("Enter address: ").strip()
em.add_employee(name, age, sex, address)
elif option == "delete":
name = input("Enter name of the employee to delete: ").strip()
em.delete_employee(name)
elif option == "display":
em.display_employees()
elif option == "quit":
print("Exiting the program.")
break
else:
print("Invalid option, please try again.")
if __name__ == "__main__":
main()
2、读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
# 定义数字对应的汉语拼音
num_to_pinyin = ["ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"]
def sum_of_digits(n):
# 计算 n 的各位数字之和
sum_digits = sum(int(digit) for digit in str(n))
return sum_digits
def number_to_pinyin(number):
# 将数字转换为汉语拼音
pinyin_list = [num_to_pinyin[int(digit)] for digit in str(number)]
return ' '.join(pinyin_list)
# 读取输入
n = input().strip()
# 计算各位数字之和
sum_digits = sum_of_digits(n)
# 将结果转换为汉语拼音并输出
result = number_to_pinyin(sum_digits)
print(result)
3、根据 1 1 2 3 5 8 13...的斐波那契数列,输出100以内的斐波那契数
def fibonacci(limit):
# 初始化斐波那契数列的前两个数
fib_sequence = [1, 1]
# 生成斐波那契数列直到下一个数超过限制
while True:
next_fib = fib_sequence[-1] + fib_sequence[-2]
if next_fib >= limit:
break
fib_sequence.append(next_fib)
return fib_sequence
# 设定限制为100
limit = 100
# 获取并输出100以内的斐波那契数
fib_sequence = fibonacci(limit)
print(fib_sequence)
4、一个数组,A中存有N(> 0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(> 0)个位置, 即将A中的数据由(A0A1···AN-1)变换为(AN-M··AN-1A0A1··AN-M-1)(最后M个数循环移至最前面的M个位置)。 如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 每个输入包含一个测试用例,第1行输入N(1<N<100)和M(> 0);第2行输入N个整数,之间用空格分隔。 输出格式: 在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。 输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
样例:
def reverse(arr, start, end):
"""反转数组从 start 到 end 的部分"""
while start < end:
arr[start], arr[end] = arr[end], arr[start]
start += 1
end -= 1
def right_rotate(arr, n, m):
"""循环右移数组 arr 的元素 m 位"""
m = m % n # 如果 m 大于 n,取 m 对 n 的模
if m == 0:
return arr
# 第一步:反转整个数组
reverse(arr, 0, n-1)
# 第二步:反转前 m 个元素
reverse(arr, 0, m-1)
# 第三步:反转后 n-m 个元素
reverse(arr, m, n-1)
return arr
# 读取输入
n, m = map(int, input().split())
arr = list(map(int, input().split()))
# 循环右移
right_rotate(arr, n, m)
# 打印结果
print(' '.join(map(str, arr)))