# ============================================================================== # 通过 D:\文档\电子文档\个人\脚本库\PythonScript\第5章.py + 题号 运行 # 程序名: # 第5章习题 # 目的: # # 修订记录: # 日期 编程者 改动描述 # =================== ============= ===================================== # 2021-07-23 15:52:52 Sola 5-1 简化dateconvert2,格式化时间输出 # 2021-07-23 15:57:01 Sola 5-2 分数等级转化 # 2021-07-23 16:29:47 Sola 5-3 百分制分数等级转化 # 2021-07-23 16:30:00 Sola 5-4 获取短语缩写 # 2021-07-23 16:44:47 Sola 5-5 计算输入单个名字的数值 # 2021-07-23 16:49:19 Sola 5-6 计算所有名字的数字之和 # 2021-07-23 17:02:26 Sola 5-7 简单基于Unicode的凯撒密码 # 2021-07-23 17:15:16 Sola 5-8 真正的凯撒密码 # 2021-07-23 17:53:11 Sola 5-9 计算用户输入句子的单词数 # 2021-07-23 21:59:33 Sola 5-10 计算输入句子中单词的平均长度 # 2021-07-23 22:04:15 Sola 5-11 第1章 chaos.py 改进版本 # 2021-07-23 22:22:38 Sola 5-12 第二章算终值改进版本 # 2021-07-23 22:23:03 Sola 5-13 ? # 2021-07-23 22:23:15 Sola 5-14 统计文件的行数、单词数和字符数 # 2021-07-23 23:21:10 Sola 5-15 学生成绩统计表 # 2021-07-23 23:21:28 Sola 5-16 数字频数统计表 # # module start # from graphics import * # 引入图形库 from os import times def test5_1(): # get the date dateStr = input("Enter a date (mm/dd/yyyy): ") # split into components monthStr, dayStr, yearStr = dateStr.split("/") # convert monthStr to the month name months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] monthStr = months[int(monthStr)-1] # output result in month day, year format print("The converted date is: {0} {1}, {2}".format(monthStr, dayStr, yearStr)) def test5_2(): score = int(input("请输入你的分数:")) grade = ["F", "E", "D", "C", "B", "A"] result = grade[score] print("你的分数对应的等级为:{0}".format(result)) def test5_3(): score = int(float(input("请输入你的分数:")) / 10) grade = ["F", "F", "F", "F", "F", "F", "D", "C", "B", "A", "A"] result = grade[score] print("你的分数对应的等级为:{0}".format(result)) def test5_4(): inputStr = input("请输入一个短语:") shortName = "" for i in inputStr.split(): shortName = shortName + i[0].upper() print("'{0}' 的缩写为:{1}".format(inputStr, shortName)) def test5_5(): name = input("请输入单个名字:").lower() sum = 0 for i in name: sum = sum + ord(i) - 96 print("{0} 的数值为:{1}".format(name, sum)) def test5_6(): name = input("请输入你的名字:").lower() sum = 0 for i in name.split(): for j in i: sum = sum + ord(j) - 96 print("{0} 的数值为:{1}".format(name, sum)) def test5_7(): char = input("请输入需要加密的密文:") key = int(input("请输入密文的偏移位数:")) def code(char, key): coding = "" for ch in char: coding = coding + chr(ord(ch) + key) return coding coding = code(char, key) print("{0} 编码后的密文为:{1}".format(char, coding)) key = int(input("请输入密钥:")) decoding = code(coding, -key) print("{0} 解码后的明文为:{1}".format(coding, decoding)) def test5_8(): char = input("请输入需要加密的密文:") key = int(input("请输入密文的偏移位数:")) def code(char, key): keyList = "abcdefghijklmnopqrstuvwxyz" coding = "" for ch in char: if ord(ch) <= ord("z") and ord(ch) >= ord("a"): coding = coding + keyList[(ord(ch) + key - ord("a")) % 26] elif ord(ch) <= ord("Z") and ord(ch) >= ord("A"): coding = coding + keyList[(ord(ch) + key - ord("A")) % 26].upper() else: coding = coding + ch return coding coding = code(char, key) print("{0} 编码后的密文为:{1}".format(char, coding)) key = int(input("请输入密钥:")) decoding = code(coding, -key) print("{0} 解码后的明文为:{1}".format(coding, decoding)) def test5_9(): inputSentence = input("请输入需要统计的句子:") num = 0 for ch in inputSentence.title(): if ord(ch) <= ord("Z") and ord(ch) >= ord("A"): num = num + 1 print("输入语句 {0} 中有 {1} 个单词".format(inputSentence, num)) def test5_10(): inputSentence = input("请输入需要统计的句子:") num = 0 long = 0 for ch in inputSentence.title(): if ord(ch) <= ord("Z") and ord(ch) >= ord("A"): num = num + 1 for ch in inputSentence.lower(): if ord(ch) <= ord("z") and ord(ch) >= ord("a"): long = long + 1 print("输入语句 {0} 中每个单词的平均长度为 {1:2.1f}".format(inputSentence, long / num)) def test5_11(): inputList = input("请输入两个初始值(用逗号分隔):").split(",") init1, init2 = float(inputList[0]), float(inputList[1]) times = int(input("请输入迭代次数:")) print("index {0:^8.2f} {1:^8.2f}\n------------------------------".format(init1, init2)) for i in range(times): init1 = 3.9 * init1 * (1 - init1) init2 = 3.9 * init2 * (1 - init2) print("{0:<5} {1:8.6f} {2:8.6f}".format(int(i) + 1, init1, init2)) def test5_12(): print("This program calculates the future value of a investment.") principal = eval(input("Enter the principal: ")) years = eval(input("Enter the number of years of your investment: ")) apr = eval(input("Enter the annual interest rate: ")) print("Year {0:^8}\n----------------".format("Value")) print("{0:<4} ${1:>7.2f}".format(0, principal)) for i in range(years): principal = principal * (1 + apr) print("{0:<4} ${1:>7.2f}".format(i + 1, principal)) def test5_13(): print("???不玩了不玩了,没意思,再见吧您嘞!") def test5_14(): from tkinter.filedialog import askopenfilename print("请选择需要统计的文件:") inputFileName = askopenfilename() inputFile = open(inputFileName, 'r') print("成功打开文件:{0}".format(inputFileName)) numLines = len(inputFile.readlines()) print("文件中共有句子 {0} 行".format(numLines)) numWords = 0 numChs = 0 inputFile = open(inputFileName, 'r') for ch in inputFile.read().title(): if ord(ch) <= ord("Z") and ord(ch) >= ord("A"): numWords = numWords + 1 numChs = numChs + 1 print("文件中共有单词 {0} 个".format(numWords)) print("文件中共有字符 {0} 个".format(numChs)) def test5_15(): # 4 # Computewell, 90 # Dibblebit, 60 # Jones, 80 # Smith, 70 from tkinter.filedialog import askopenfilename from graphics import GraphWin, Text, Rectangle, Point print("请选择输入的文件记录:") inputFile = open(askopenfilename(), 'r') print("成功打开文件!") numStudents = int(inputFile.readline()) win = GraphWin("学生考试成绩", 800, numStudents * 30) for i in range(numStudents): infoList = inputFile.readline().split(",") Text(Point(95, 15 + 30 * i), infoList[0]).draw(win) Rectangle(Point(200, 7 + 30 * i), Point(200 + 590 * float(infoList[1]) / 100, 23 + 30 * i)).draw(win) win.getMouse() def test5_16(): # 0 # 1 # 2 # 2 # 4 # 4 # 4 # 5 # 5 # 5 # 5 # 6 # 6 # 6 # 6 # 6 # 7 # 7 # 7 # 7 # 7 # 7 # 7 # 8 # 8 # 8 # 9 # 9 # 9 # 10 # 10 from tkinter.filedialog import askopenfilename from graphics import GraphWin, Text, Rectangle, Point print("请选择输入的文件记录:") numList = open(askopenfilename(), 'r').readlines() print("成功打开文件!") timesList = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for i in numList: timesList[int(i)] = timesList[int(i)] + 1 win = GraphWin("数字统计", 440, 300) numMax = max(timesList) num = 0 for i in timesList: Text(Point(20 + 40 * num, 285), num).draw(win) Rectangle(Point(10 + 40 * num, 270), Point(30 + 40 * num, 270 - 260 * i / numMax)).draw(win) num = num + 1 win.getMouse() import sys def run(num): eval("test5_" + num + "()") run(sys.argv[1])