关于#python#的问题:不可以使用max ,min ,exit ,break 的情况下找出哪一年份出生率最高,以及哪一年份出生率最低

img

img

img


求指教我需要如何完成,不可以使用max ,min ,exit ,break 的情况下找出哪一年份出生率最高,以及哪一年份出生率最低

def bigAndSmall(path):
    # 定义最大值接收变量,但是不能赋值,初始赋值第一行
    biggest = None
    # 定义最小值接收变量,但是不能赋值,初始赋值第一行
    smallest = None
    # 打开文件
    with open(path) as f:
        # index从0开始,0表示列名行,这行需要忽略不处理
        index = 0
        # 遍历文件
        for item in f:
            # 剔除右边的换行空格字符
            line = item.rstrip()
            # 将line拆分为数组
            line = line.split(',')
            # 第一行赋值给最大最小
            if index == 1:
                biggest = line
                smallest = line
            elif index > 1:
                # 比较出生率,转换为float,字符串无法比较
                if float(biggest[5]) < float(line[5]):
                    biggest = line
                if float(smallest[5]) > float(line[5]):
                    smallest = line
            # 遍历完行号+1
            index += 1
    # 打印结果
    print(f'The highest birthrate was {biggest[5]} which occurred in {biggest[2]} County {biggest[1]} in {biggest[0]}')
    print(
        f'The lowest birthrate was {smallest[5]} which occurred in {smallest[2]} County {smallest[1]} in {smallest[0]}')


bigAndSmall('teenpreganc.txt')

看不懂

可以参考代码,仅使用for循环遍历。优化的话可以考虑使用字典。

# -*- coding: UTF-8 -*-

def bigAndSmall(path):
    f = open(path)  # 返回一个文件对象
    line = f.readline()
    biggest = line  # 调用文件的 readline()方法
    smallest = line  # 调用文件的 readline()方法
    while line:
        line = f.readline()
        if line == '':
            continue
        smallest = getSmall(line, smallest)
        biggest = getMax(line, biggest)
    print(biggest)
    print(smallest)
    f.close()


# 获取较小
def getSmall(l, r):
    l_ar = l.split(',')
    r_ar = r.split(',')
    if l_ar[-1] < r_ar[-1]:
        return l
    else:
        return r


# 获取较大
def getMax(l, r):
    l_ar = l.split(',')
    r_ar = r.split(',')
    if l_ar[-1] > r_ar[-1]:
        return l
    else:
        return r


if __name__ == '__main__':
    bigAndSmall(r"D:\test\test.txt")
def bigAndSmall():
    with open('teenpreganc.txt') as f:
        hasValue=0
        firstLine=1
        for line in f:  # 按行读取,不用管是否是第一行
            if firstLine: #如果是标题,跳过
                firstLine=0
            else:
                if not hasValue: #如果max和min还没有赋值,则赋值
                    max=float(line[5])
                    min=float(line[5])
                else:
                    if float(line[5])>max:
                        max=float(line[5])
                        maxline=line #用于保存其它信息待打印
                    if float(line[5])<min:
                        min=float(line[5])
                        minline=line

        print(f'The highest birthrate was {max} which occurred in {maxline[2]} County {maxline[1]} in {maxline[0]}')
        print(f'The lowest birthrate was {min} which occurred in {minline[2]} County {minline[1]} in {minline[0]}')

把数据按照最后一列从大到小排个序不就知道了,排序第一的年份最高,最后一个年份出生率最底

这是求最大的

import datetime
list_time = []
chuo=[]
a = input()
while a:   # 当获取到空串时停止获取输入
    list_time.append(a)
    a = input()
#print(list_time)
for time in list_time:
    time1=datetime.datetime.strptime(time,'%Y-%m-%d').timestamp()#转化为时间戳
    chuo.append(time1)
    chuo1=sorted(chuo)
index=chuo.index(chuo1[0])
print(list_time[index])



最小的同理

def BigAndSmall(): 
    with open("data1.txt") as f:    
        all_info = [i.strip().split(',') for i in f.readlines()]
        all_data = all_info[1:]
        max_br = min_br = float(all_data[0][5])
        for idx,value in enumerate(all_data):            
            if max_br < float(value[5]):
                max_br = float(value[5])
                max_idx = idx          
            if min_br > float(value[5]):
                min_br = float(value[5])
                min_idx = idx  
                
        print(f"The highest birthrate was {all_data[max_idx][5]} which occurrend in {all_data[max_idx][1]}.{all_data[max_idx][2]} in {all_data[max_idx][0]}")
        print(f"The highest birthrate was {all_data[min_idx][5]} which occurrend in {all_data[min_idx][1]}.{all_data[min_idx][2]} in {all_data[min_idx][0]}")

BigAndSmall()

--result
The highest birthrate was 77 which occurrend in Alabama.Barbour in 2007
The highest birthrate was 18 which occurrend in Alabama.Baldwin in 2020

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632