写一段python代码,根据输入n完成下列功能:(文件编码格式为utf-8) 本题内如需排序,为保证排序结果测试正确,必须采用直接排序取前k位。 需要取最高前20位时,必须从大到小排序,取前20位数据。不允许从小到大排序,再逆序取数据。 需要取最低前20位时,必须从小到大排序,取前20位数据。不允许从大到小排序,再逆序取数据。 若n为'最低总价',则可以继续输入一个整数k,输出'价格'列最低的前k位,行内数据以空格为间隔。格式见输入输出示例 若n为'最大面积',则可以继续输入一个整数k,输出'面积'列最大的前k位,行内数据以空格为间隔。格式见输入输出示例 若n为'最低单价',输出每平米价格最低的1条房源信息(按公式计算:每平米价格=价格/面积),行内数据以空格为间隔。格式见输入输出示例 若n为'毛坯电梯房单价',输出数据中所有满足'有电梯'并且装修情况为'毛坯'的房屋的每平米平均价格(按公式计算:每平米平均价格=总价格/总面积),格式见输入输出示例 若n为'年份',则可以继续输入字符串s,如果有年份为s的数据,输出年份为s的房屋套数;如果没有匹配数据,输出'无数据',格式见输入输出示例 如果非以上输入,则在小区名中查找是否包含n,并输出所有包含n字段的小区房源信息(按文件数据原有顺序),行内数据以空格为间隔。如果没有数据,则输出'未找到相关数据'
时间: 2024-02-27 20:56:43 浏览: 33
以下是一个可能的实现:
```python
def process_input(n):
data = [] # 存储房源信息的列表
with open('data.txt', encoding='utf-8') as f:
for line in f:
fields = line.strip().split()
info = {
'小区名': fields[0],
'价格': float(fields[1]),
'面积': float(fields[2]),
'有电梯': fields[3] == '是',
'装修情况': fields[4],
'年份': fields[5]
}
data.append(info)
if n == '最低总价':
k = int(input())
sorted_data = sorted(data, key=lambda x: x['价格'])
for i in range(k):
print('{} {:.2f}'.format(sorted_data[i]['小区名'], sorted_data[i]['价格']))
elif n == '最大面积':
k = int(input())
sorted_data = sorted(data, key=lambda x: x['面积'], reverse=True)
for i in range(k):
print('{} {:.2f}'.format(sorted_data[i]['小区名'], sorted_data[i]['面积']))
elif n == '最低单价':
min_price = float('inf')
min_price_info = None
for info in data:
price_per_sqm = info['价格'] / info['面积']
if price_per_sqm < min_price:
min_price = price_per_sqm
min_price_info = info
print('{} {:.2f} {:.2f}'.format(min_price_info['小区名'], min_price_info['价格'], min_price_info['面积']))
elif n == '毛坯电梯房单价':
sum_price = 0
sum_sqm = 0
count = 0
for info in data:
if info['有电梯'] and info['装修情况'] == '毛坯':
sum_price += info['价格']
sum_sqm += info['面积']
count += 1
if count == 0:
print('无数据')
else:
avg_price_per_sqm = sum_price / sum_sqm
print('{:.2f}'.format(avg_price_per_sqm))
elif n == '年份':
s = input()
count = 0
for info in data:
if info['年份'] == s:
count += 1
if count == 0:
print('无数据')
else:
print(count)
else:
found = False
for info in data:
if n in info['小区名']:
print('{} {:.2f} {:.2f} {} {} {}'.format(
info['小区名'], info['价格'], info['面积'],
'是' if info['有电梯'] else '否', info['装修情况'], info['年份']
))
found = True
if not found:
print('未找到相关数据')
```
这个函数使用了一个列表来存储所有房源信息,每个房源信息是一个字典。然后根据输入的n进行相应的处理:
- 如果n为'最低总价',则继续输入k,对房源信息列表按照价格从小到大排序,取前k个房源信息,输出这些房源信息的小区名和价格。
- 如果n为'最大面积',则继续输入k,对房源信息列表按照面积从大到小排序,取前k个房源信息,输出这些房源信息的小区名和面积。
- 如果n为'最低单价',遍历房源信息列表,计算每个房源的每平米价格,然后找到每平米价格最低的房源信息,输出该房源信息的小区名、价格、面积和每平米价格。
- 如果n为'毛坯电梯房单价',遍历房源信息列表,筛选出有电梯且装修情况为毛坯的房源信息,计算这些房源信息的每平米平均价格,输出该平均价格。
- 如果n为'年份',则继续输入字符串s,遍历房源信息列表,找到年份为s的房源信息,输出该年份的房源套数。
- 如果n为其他字符串,则遍历房源信息列表,找到小区名包含n的所有房源信息,输出这些房源信息的小区名、价格、面积、是否有电梯、装修情况和年份。
输出格式按照题目要求进行处理。注意,输出的浮点数需要控制小数点后的位数。