我相信转专业最痛苦的就是补修,最近补修了C语音虽然感觉老师讲的还不如网课但是最后布置了经典的C语言经典100题说是平时分(图片如下)
甚至给了答案
让我们写没有意义的东西甚至是直接让我们复制粘贴,看不起人的态度着实气人,于是我决定直接用自动化的方式来完成这个作业
首先要明确需求既老师要求的代码和运行截图
首先是代码
由于文件中已经给出了答案代码(虽然是c89的标准)但是我发现结果代码上下有明显的标志
所以我们可以直接用python中的正则表达来提取代码
首先把发的文件中的东西全都复制到一个.txt文件中
掐头去尾(也可以不搞但是我觉得还是搞一下好一些)
把目录和附录给删掉
然后在没有“=”的答案后面补上“=”
然后开始提取
import re
with open('文本路径','r',encoding='utf-8') as f:
text = f.read()
r = re.compile(r'2.程序源代码:\n(.*?)==============================================================',re.S)
ll = r.findall(text)
i = 1
for j in ll:
# 新建一个文件夹用来储存
path = '储存路径'
path = path + str(i) + '.c'
with open(path,'w',encoding='utf-8') as c:
c.write(j)
i += 1
但是不知道为什么提取不完好像只能搞八十几个然后可以手动一下或把已经提取出来的删了后再进行提取
这样我们就得到了源码
然后就是下一项获得运行截图
首先我们要知道这些程序有一些要参数有一些不用所以shell脚本不行(试过了)因此我们可以用chatgpt来运行代码并获得结果(用python展示)
首先找到这个项目
免费chatgpt接口(没有魔法可能比较慢)
然后找到这个地方(点击)
会转跳到另一个页面(这时候要把魔法关掉不然可能不成功)得到如下信息
然后就可以开始了(我是参考了上面那个项目给的代码第一次用写的不好请见谅(∠・ω< )⌒★)
参考代码
我写的代码如下(后来写的没跑但应该可以不行就靠万能的AI改改)
import time
import openai
openai.api_key = "刚刚网站获取的API KEY"
x = 100
while x <= 100:
try:
openai.base_url = "https://free.v36.cm/v1/"
openai.default_headers = {"x-foo": "true"}
# 源文件路径
pa = '刚刚获取的代码文件的文件夹路径' + str(x) + '.c'
with open(pa,'r',encoding='utf-8') as f:
s = f.read()
# 给chatgpt执行的语句
s = '自动生成参数运行以下C语音代码,如果代码出现错误则修正后执行修正代码,最后只返回运行结果不需要提供修正代码\n' + s
completion = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "user",
"content": s,
},
],
)
# 返回来的是字节流形式的数据
re = completion.choices[0].message.content
repa = '保存文件夹路径' + str(x) + '.txt'
re = re.encode('utf-8')
with open(repa,'wb') as f2:
f2.write(re)
x += 1
except:
time.sleep(10)
x += 1
然后可以得到文本形式的代码运行结果
最后一步就是拿到运行截图
由于我们现在有了运行结果的文本版我们只用把内容截图截下列就行了
试了好几种方法都不好用最后还是自己想到了可以用selenium(爬虫/自动化测试工具)+浏览器(我用的是Chrome,火狐也可以,不推荐IE)
原理:
假如我们在搜索栏中放入本机文件路径就可以用浏览器打开相应文件(如图)
于是我们就可以用浏览器依次打开我们刚刚保存的运行结果并用selenium进行截图
selenium的安装和部署可以自己去百度Chrome驱动也可以百度下载
代码如下
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = Chrome()
for i in range(1,101):
x = '存放运行结果的路径' + str(i) + '.txt'
xx = '存放截图文件夹路径'+ str(i) + '.png'
driver.get(x)
a = driver.find_element(By.XPATH,'/html/body')
a.screenshot(r'{}'.format(xx))
然后就可以得到100个截图了
最后最好还是自己再看看有些Ai的不尽人意