ASCII字符日期显示换行问题求助(竞赛限定time库)
ASCII日期艺术字符并排显示修复方案
问题描述
编写的ASCII日期程序需要输出日/月的艺术字符,但当前字符总是自动换行,无法并排显示;尝试print(one, end='')无效,且竞赛限制仅能使用time库(原代码用了datetime,需要替换)。
问题根源
当前每个数字的ASCII艺术是包含换行符的完整字符串,打印时会直接输出所有换行,导致两个数字上下排列而非并排。必须按行拆分数字艺术,逐行拼接对应行后打印才能实现并排。
解决方案代码
import time # ASCII标题(可选保留) today_date = ' _____ _ _ ___ _____ _ _ \n |_ _|__ __| |__ _ _ _ __( )___ | \ __ |_ _|__ (_)__(_)\n | |/ _ \/ _` / _` | || (_-</(_-< | |) / _` || |/ -_) | (_-<_ \n |_|\___/\__,_\__,_|\_, /__/ /__/ |___/\__,_||_|\___| |_/__(_)\n |__/ ' # 每个数字的ASCII艺术按行拆分为列表,确保每行长度一致 digits = { '0': [' __ ', ' / \\ ', ' | () |', ' \\__/ '], '1': [' _ ', ' / | ', ' | | ', ' |_| '], '2': [' ___ ', ' |_ ) ', ' / / ', ' /___| '], '3': [' ____ ', ' |__ / ', ' |_ \\ ', ' |___/ '], '4': [' _ _ ', ' | | | ', ' |_ _|', ' |_| '], '5': [' ___ ', ' | __| ', ' |__ \\ ', ' |___/ '], '6': [' __ ', ' / / ', ' / _ \\ ', ' \\___/ '], '7': [' ____ ', ' |__ |', ' / / ', ' /_/ '], '8': [' ___ ', ' ( _ ) ', ' / _ \\ ', ' \\___/ '], '9': [' ___ ', ' / _ \\ ', ' \\_, / ', ' /_/ '] } # 使用time库获取当前日期 current_time = time.localtime() day = f"{current_time.tm_mday:02d}" # 日,补零为两位 month = f"{current_time.tm_mon:02d}" # 月,补零为两位 dt_string = day + month print("date and time =", dt_string) # 获取日和月的每一位数字对应的ASCII行 day_digits = [digits[day[0]], digits[day[1]]] month_digits = [digits[month[0]], digits[month[1]]] # 逐行拼接打印:日的两位 + 分隔 + 月的两位 for line in range(4): day_line = day_digits[0][line] + ' ' + day_digits[1][line] month_line = month_digits[0][line] + ' ' + month_digits[1][line] print(f"{day_line} {month_line}")
关键修改点
- 替换
datetime为time库:用time.localtime()获取日期信息,符合竞赛限制。 - 重构数字定义:将每个数字的ASCII艺术拆分为行列表,保证每行长度统一,方便拼接。
- 逐行打印逻辑:循环遍历每一行,把日的两位数字对应行、月的两位数字对应行分别拼接后整行输出,实现并排效果。
- 修正原代码错误:原代码中
dt_string[0] == 0的判断逻辑错误,重构后通过字典直接索引避免此类问题。
内容的提问来源于stack exchange,提问作者Ian Keh
相关产品推荐
相关产品推荐

