• 全部
  • 互动交流
  • 文章分享

代码运行结果不符合要求,求救

lansan_NEW 2020-10-10 08:24:22
##读取一个Python源文件,将文件中所有除保留字外的小写字母换成大写字母
##生成后的文件要能够被Python解释器正确执行

#建立保留字列表
import keyword
s = keyword.kwlist

#建立内置函数列表w,将所有内置函数都加入保留字列表s
w = dir(__builtins__)
for i in range(len(w)):
s.append(w[i])
s.append('(input') #自行添加Python源文件中保留字、自定义函数以外的Python参数
s.append('sum))') #百度到的Python书写规范:括弧内的元素必须顶着左、右括弧,如:(a, b)正确;( a, b )不正确
n = input('输入一个文件名:')

#建立一个以每行的所有单词为元素组成的列表组
f = open(n,'r',encoding = 'utf-8').readlines()
ls = [i.split() for i in f] #四行#@@代码的简写
#@@ls = []
#@@for i in f:
#@@ i = i.split()
#@@ ls.append(i)

##fw = open(n,'r')
##for i in range(len(ls)):
## for j in range(len(ls[i])):
## x = ls[i][j]
## print(x)

#遍历二维列表,把普通单词小写变大写
fo = open(n,'w+')
for i in range(len(ls)):
if f[i].isspace(): #str.isspace():如果字符串中只包含空格,返回True,否则False
fo.write(' ' + '\n')
for j in range(len(ls[i])):
x = ls[i][j]
if x not in s:
x = x.upper()
else:
x = x
#将修改后的列表存入文件(覆盖写) 注意:“:”后的包含关系
if x == ls[i][len(ls[i])-1]:#判定是否遍历至每行的末尾
if x == ':':
fo.write(x)
fo.write('\n')
fo.write(' ')#判断是否是包含关系
else:
fo.write(x)
fo.write('\n')
else:
fo.write(x + ' ')
##fo.seek(0)
##for line in fo:
## print(line)
fo.close()

################源文件代码##################
##n = int (input ("请输入一个整数:"))
##sum = 0
##for i in range (n) :
## sum += i+1
##print ("1到{}相加的和是{}" . format (n, sum))

运行程序,得到结果:
N = int (input ("请输入一个整数:"))
sum = 0
for I in range (N) :
sum += I+1 print ("1到{}相加的和是{}" . format (N, sum))

两个问题:1、处理不好最后的换行
2、源代码为了分词特意打了很多空格,虽然源代码能正常运行,但我不知道这个源代码是否符合规范。
请大神指点。
...全文
73 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lansan_NEW 2020-10-11
引用 3 楼 rrrr336 的回复:
楼主,换个思路,也许管用: 把文件先 全转换为大写字母,然后查找关键字替换。 另外,不用readline(),而是把源文件作为一个整体读入,就不用处理复杂的缩进和换行之类。保持原样,只是关键字替换。
# coding=utf-8
import re
import keyword
with open('testsource.py', encoding='utf-8') as f:
    s = f.read()
s = s.upper()
#define keywords by yourself, e.g. attributes from print: 'end', re: 'flags', module name: 're', etc.
my_keywords = ['end', 'flags', 're']  
keys = keyword.kwlist + dir(__builtins__) + my_keywords
for k in keys:
    s = re.sub(k, k, s, flags=re.IGNORECASE) 
with open('testwrite.py','w', encoding='utf-8') as fw:
    fw.write(s)
1. 用正则的sub而不用 str.replace , 是因为有时候替代有重叠,必须忽略大小写去查找。例如: 先替代 for后, 所有FORMAT就变成了forMAT 2. 加入了一个自定义的关键字列表,是因为有些函数的属性的名字没有在关键字列表中,比如 print 函数中的 end (print(a, end=''), 上面的re 中的 ‘flags’, 模块名字如‘math’等 3. 关键字要保持原样,例如‘False’, 'True', 'None' 等有大小写混合 测试了你上面的两文件都没问题。 需要进一步开发: 1. 完善属性和模块名字等其他关键字 2. 判定是否是 注释,因为注释中如有单词和关键字一样,也会改成小写的 3. ....
小白刚学完第七章《文件和数据格式化》,没学过正则表达式
回复
rrrr336 2020-10-11
楼主,换个思路,也许管用: 把文件先 全转换为大写字母,然后查找关键字替换。 另外,不用readline(),而是把源文件作为一个整体读入,就不用处理复杂的缩进和换行之类。保持原样,只是关键字替换。
# coding=utf-8
import re
import keyword
with open('testsource.py', encoding='utf-8') as f:
    s = f.read()
s = s.upper()
#define keywords by yourself, e.g. attributes from print: 'end', re: 'flags', module name: 're', etc.
my_keywords = ['end', 'flags', 're']  
keys = keyword.kwlist + dir(__builtins__) + my_keywords
for k in keys:
    s = re.sub(k, k, s, flags=re.IGNORECASE) 
with open('testwrite.py','w', encoding='utf-8') as fw:
    fw.write(s)
1. 用正则的sub而不用 str.replace , 是因为有时候替代有重叠,必须忽略大小写去查找。例如: 先替代 for后, 所有FORMAT就变成了forMAT 2. 加入了一个自定义的关键字列表,是因为有些函数的属性的名字没有在关键字列表中,比如 print 函数中的 end (print(a, end=''), 上面的re 中的 ‘flags’, 模块名字如‘math’等 3. 关键字要保持原样,例如‘False’, 'True', 'None' 等有大小写混合 测试了你上面的两文件都没问题。 需要进一步开发: 1. 完善属性和模块名字等其他关键字 2. 判定是否是 注释,因为注释中如有单词和关键字一样,也会改成小写的 3. ....
回复
lansan_NEW 2020-10-10
2楼代码书写不规范,直接引用无法分词。请自行增加空格。
回复
lansan_NEW 2020-10-10
如果源文件代码改为: def f(): try: n = int(input("请输入一个整数:")) except: print("输入异常,请重新输入:") return f() ## s = 0 #计算器s,放在循环外:s只初始化一次为0 for i in range(2,n): s = 0 #计算器s,放在循环内:外循环每循环一次,s就赋0一次 for j in range(2,i+1): if i%j == 0: s += 1 if s == 1: print(i,end = " ") f() 问题:1、'def f():'以下的语句,用冒号来判断缩进不好使,请问大神有什么好的处理方法吗? 2、 except: print("输入异常,请重新输入:") return f() 冒号后有2个缩进语句的代码如何处理?
回复
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2020-10-10 08:24
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: