1.list
1.1employee_list_removal
def print_employees(employees):
number_of_employees = len(employees)
print(f'There are {number_of_employees} employees:')
for employee in employees:
print(employee)
employees = ['John Smith', 'Jakie Jackson', 'Chris Jones', 'Amanda Cullen']
print_employees(employees)
employee_name = input('Enter an employee name to remove: ')
employees = [employee for employee in employees if employee!= employee_name]
print_employees(employees)
1.2picking_a_winner
import random
random.seed(42) # 设置种子保证程序可重复
names = list() # 初始化空的姓名列表
# 获取输入的第一个名字
while True:
employee_name = input('Enter a name: ')
if len(employee_name) > 0:
names.append(employee_name)
break
else:
print('A valid input is required')
# 获取输入的其他名字
while True:
employee_name = input('Enter a name: ')
if len(employee_name) > 0:
names.append(employee_name)
else:
break
winner_name = random.choice(names)
print('The winner is... ', winner_name)
1.3computing_statistics
# 定义获取第一个有效响应时间值的函数
def get_first_number():
while True:
try:
number = input('Enter a number: ')
number = int(number)
return number
except ValueError:
print('A valid input is required')
# 定义获取一个响应时间值或'done'字符串的函数
def get_data():
while True:
try:
number = input('Enter a number: ')
number = int(number)
return number
except ValueError:
if number == 'done':
return number
else:
print('A valid input is required')
# 定义按格式打印所有响应时间的函数
def print_numbers(numbers):
print('Numbers:', end=' ')
for i, num in enumerate(numbers):
if i > 0:
print(', ', end='')
print(num, end='')
print()
# 主流程
numbers = list() # 初始化空的数值列表
# 补充代码实现调用函数获取输入的第一个响应时间值,并添加到数值列表中
first_number = get_first_number()
numbers.append(first_number)
# 补充代码实现循环调用函数获取响应时间值,并添加到数值列表中
while True:
number = get_data()
if number == 'done':
break
else:
numbers.append(number)
# 调用函数按格式打印所有响应时间数据
print_numbers(numbers)
# 计算响应时间的均值、最小值和最大值并打印
average = sum(numbers) / len(numbers)
print('The average is ', average)
minimum = min(numbers)
print(f'The minimum is ', minimum)
maximum = max(numbers)
print(f'The maximum is ', maximum)
2.dict
2.1sorting_records
# 定义函数
# 定义确定每列信息最大长度函数
def get_max_len(users):
# 以列名长度初始化每列打印信息最大长度
max_len = {'first_name': len('first_name'),
'last_name': len('last_name'),
'position': len('position'),
'separation_date': len('separation_date')
}
# 补充代码实现循环用户信息,更新最大长度值
for item in users:
for key in max_len.keys():
if key in item:
max_len[key] = max(max_len[key], len(item[key]))
return max_len
# 定义打印表头函数
def print_headings(max_len):
for key, value in max_len.items():
end_spaces = ' ' * (value - len(key)) # 补充代码实现列名后补空格到和最长信息同长
print(key,end_spaces, end='|') # 输出列名栏:列名+空格+|
# 一行结束打印换行符
print()
# 补充代码实现表头与内容行间插一行连字符
for key, value in max_len.items():
print('-' * (value + 1), end='|') # 输出连字符行:连字符+|
# 一行结束打印换行符
print()
# 定义按列表排列顺序逐行打印用户信息函数
def print_users(users, max_len):
for user in users:
for key in max_len.keys():
if key in user:
end_spaces = ' ' * (max_len[key] - len(user[key]))
print(user[key], end_spaces, end='|')
else:
print(' ' * max_len[key], end='|') # 如果某列没有信息,打印空格
# 一行结束打印换行符
print()
def main():
# 1.初始化用户信息列表
users = [
{'first_name': 'John', 'last_name': 'Johnson', 'position': 'Manager', 'separation_date': '2016-12-31'},
{'first_name': 'Tou', 'last_name': 'Xiong', 'position': 'Software Engineer', 'separation_date': '2016-10-05'},
{'first_name': 'Michaela', 'last_name': 'Michaelson', 'position': 'District Manage', 'separation_date': '2015-12-19'},
{'first_name': 'Jake', 'last_name': 'Jacobson', 'position': 'Programmer', 'separation_date': ''},
{'first_name': 'Jacquelyn', 'last_name': 'Jackson', 'position': 'DBA', 'separation_date': ''},
{'first_name': 'Sally', 'last_name': 'Weber', 'position': 'Web Developer', 'separation_date': '2015-12-18'}
]
# 2.借助函数对用户信息列表依据last_name进行从小到大排序
def get_last_name(item):
return item['last_name']
sorted_users = sorted(users, key=get_last_name) # 补充代码实现对users排序
# 3.打印信息
#3.1 确定每列信息最大长度
max_len = get_max_len(sorted_users)
#3.2 打印表头
print_headings(max_len)
# 3.3 按列表排列顺序逐行打印用户信息
print_users(sorted_users, max_len)
if __name__ == "__main__":
main()
2.2 Monty_Hall
import random
random.seed(38) # 设置种子保证程序可重复
# 定义初始化门的函数
def init():
'''返回一个字典,键为 3 个门号(0,1,2),值为门后面的物品 goat car'''
result = {i: 'goat' for i in range(3)}
r = random.randint(0, 2)
result[r] = 'car'
return result
# 定义获取玩家初始选择的门号的函数
def get_firstDoorNum():
while True:
try:
firstDoorNum = int(input('请选择一个门号(0,1,2):'))
assert firstDoorNum in [0, 1, 2]
return firstDoorNum
except:
print('门号必须在0和2之间')
def PlayGame():
# 获取本次游戏中每个门的情况
doors = init()
# 获取玩家选择的门号
firstDoorNum = get_firstDoorNum()
# 主持人打开剩下有山羊的一扇门
for host_opens in range(3):
if host_opens!= firstDoorNum and doors[host_opens] == 'goat':
print(host_opens,'号门后是"goat"')
break
# 获取第三个门号,让玩家纠结
for thirdDoor in range(3):
if thirdDoor!= firstDoorNum and thirdDoor!= host_opens:
break
# 获取玩家是否切换输入
change = input('切换到%d号门?(y/n)'%(thirdDoor))
finalDoorNum = thirdDoor if change == 'y' else firstDoorNum
if doors[finalDoorNum] == 'goat':
print('你失败了!') # 玩家失败
else:
print('你赢了!') # 玩家赢
while True:
print('='*30)
PlayGame()
r = input('你要再玩一次游戏吗?(y/n)')
if r == 'n':
break