You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python无依赖生成的字符折线图代码以标记最低点

字符折线图添加最低点标记修改方案

你只需要对原有代码做3处修改即可实现最低点标记功能,修改点如下:

1. 修改最值计算函数,新增最低点索引记录

原有函数只返回了最大值、最大值索引、最小值,没有记录最小值对应的索引,我们需要补充该逻辑:

def get_Max_and_MaxIndex_MinIndex(num_list): # get maximul value, its index and minimum value
    sign = 1
    val = 0
    max_val = 0
    min_val = 0
    max_ind = 0
    min_ind = 0 # 新增:存储最小值索引
    count = 0
    for num in num_list:
        count += 1
        val = val + sign * num
        sign = -1 * sign
        if (max_val < val):
            max_val = val
            max_ind = count
        if (min_val > val):
            min_val = val
            min_ind = count # 新增:更新最小值索引
    return max_val, max_ind, min_val, min_ind # 新增:返回最小值索引

2. 主程序中新增最低点横坐标计算逻辑

在原有最高点横坐标计算完成后,补充最低点横坐标的计算:

# 原有最高点横坐标计算
start_num = 0
for i in range(max_min_num[1]):
    start_num += num_input[i] # maximum height element number

# 新增:计算最低点横坐标
min_start_num = 0
for i in range(max_min_num[3]):
    min_start_num += num_input[i]

3. 折线打印完成后新增最低点标记打印逻辑

原有代码只在折线上方打印了最高点标记,我们在折线打印完成后补充最低点的标记:

# 原有折线打印逻辑
for indr in range(row_num - 1, -1, -1):
    print("".join(print_data[indr]))

# 新增:打印最低点标记
print(" " * max(0, min_start_num - 1) + "< >" + " " * (col_num - min_start_num - 1))
print(" " * max(0, min_start_num - 1) + "\\|/" + " " * (col_num - min_start_num - 1))
print(" " * min_start_num + "o" + " " * (col_num - min_start_num))

修改后完整代码

data = input("Input:")

def parse_to_int(dat): # parse input data to int list
    individuals = dat.split(" ")
    num = []
    for individual in individuals:
        num.append((int)(individual))
    return num
    
def get_Max_and_MaxIndex_MinIndex(num_list): # get maximul value, its index and minimum value
    sign = 1
    val = 0
    max_val = 0
    min_val = 0
    max_ind = 0
    min_ind = 0
    count = 0
    for num in num_list:
        count += 1
        val = val + sign * num
        sign = -1 * sign
        if (max_val < val):
            max_val = val
            max_ind = count
        if (min_val > val):
            min_val = val
            min_ind = count
    return max_val, max_ind, min_val, min_ind
    
def sub_sum(ind): # calculate subsum until ind
    global num_input
    global subsum
    subsum = 0
    for i in range(ind + 1):
        subsum += num_input[i]
    return subsum

def sub_sum_with_sign(ind): # calculate subsum with sign until ind
    global num_input
    global subsum_withsign
    subsum_withsign = 0
    sign = 1
    for i in range(ind + 1):
        subsum_withsign += sign * num_input[i]
        sign = -1 * sign
    return subsum_withsign

def fill_data(ind): # fill data for print in empty data
    global print_data
    global cur_x
    global cur_y

    if ind % 2 == 0:
        str = '/'
        dx = 1
        dy = 1
    else:
        str = '\\'
        dx = 1
        dy = -1

    for _ in range(num_input[ind]):
        print_data[cur_y][cur_x] = str
        cur_x += dx
        cur_y += dy

    if ind % 2 == 0:
        cur_y -= 1
    else:
        cur_y += 1

    return print_data

# main program
num_input = parse_to_int(data)
col_num = 0 # column count
for elem in num_input:
    col_num += elem
max_min_num = get_Max_and_MaxIndex_MinIndex(num_input)
max_val, max_ind, min_val, min_ind = max_min_num
row_num = max_val - min_val # row count
start_num = 0
for i in range(max_ind):
    start_num += num_input[i] # maximum height element number
# 计算最低点横坐标
min_start_num = 0
for i in range(min_ind):
    min_start_num += num_input[i]
subsum = 0
subsum_withsign = 0
cur_x = 0
cur_y = -1 * min_val

# start output
print("Output:\n")
# 打印最高点标记
print(" " * start_num + "o" + " " * (col_num - start_num))
print(" " * max(0, start_num - 1) + "/|\\" + " " * (col_num - start_num - 1))
print(" " * max(0, start_num - 1) + "< >" + " " * (col_num - start_num - 1))

# prepare data for print
print_data = []

for i in range(row_num):
    print_data.append([])
    for j in range(col_num):
        print_data[i].append(" ")

for ind in range(len(num_input)):
    fill_data(ind)

# print data
for indr in range(row_num - 1, -1, -1):
    print("".join(print_data[indr]))

# 打印最低点标记
print(" " * max(0, min_start_num - 1) + "< >" + " " * (col_num - min_start_num - 1))
print(" " * max(0, min_start_num - 1) + "\\|/" + " " * (col_num - min_start_num - 1))
print(" " * min_start_num + "o" + " " * (col_num - min_start_num))

内容的提问来源于stack exchange,提问作者Ahmad Yasin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 17:30:01