183
社区成员
The Link Your Class | https://bbs.csdn.net/forums/MUEE308FZ |
The Link of Requirement of This Assignment | https://bbs.csdn.net/topics/600798588 |
The Aim of This Assignment | Code personally & learn git and github & learn the process of writing a project & learn unit test and performance test |
MU STU ID and FZU STU ID | 19104740_831901308 |
Github code
https://github.com/JoeyLee0111/Lab2.git
Personal Software Process Stages | Estimated Time/minutes | Completed Time/minutes |
---|---|---|
Planning | 10 | 10 |
Estimate | 10 | 10 |
Analysis | 60 | 100 |
Design Spec | 40 | 40 |
Design Review | 30 | 30 |
Coding Standard | 30 | 30 |
Design | 60 | 60 |
Coding | 500 | 600 |
Code Review Planning | 60 | 60 |
Test | 90 | 120 |
Test Report | 60 | 100 |
Postmortem&Process Improvement | 120 | 120 |
Total | 1070 | 1280 |
Main thinking.
First step
Second step
Third step
Fourth step
Fifth step
First, we need to get plain text.
def get_text():
file = open("text.c", "r", encoding="UTF-8") #Ensure normal opening
text = file.read()
for i in '!#$%&()+,-.:;<=>?@[\\]^_{|}~': # Remove the punctuation
text = text.replace(i, " ")
file.close()
return text
Second, we need to filt some characters and add into the list to make the next four steps easier.
def filting():
text = get_text().replace("else if", "elseif")
separator_word = [r'//.*', r'\/\*(?:[^\*]|\*+[^\/\*])*\*+\/', r'".*"'] # Remove // , / and '
for i in separator_word:
wordlist1 = re.split(i, text)
text = ""
for word in wordlist1:
text = text + word
wordlist1 = text.split()
return wordlist1
Third, I used the traversal way to search keywords. It's a very simple solution to the first problem. Also, this method also works well for the next problem.
Fourth, I used two lists to solve this question and that'll make it more clearer.
def first_second_question(): # Number of output keywords.
words = filting()
keyWords = {"auto", "break", "case", "char", "const",
"continue", "default", "do", "double", "else",
"enum", "extern", "float", "for", "goto",
"if", "int", "long", "register", "return",
"short", "signed", "sizeof", "static", "struct",
"switch", "typedef", "union", "unsigned",
"void", "volatile", "while", "elseif"}
number = 0
fWords = []
counts1 = {}
for word in words:
if len(word) == 1 or (word not in keyWords):
continue
counts1[word] = counts1.get(word, 0) + 1
fWords.append(word)
number = number + 1
number = number + counts1.get("elseif", 0)
print("total num: {}".format(number))
num = counts1.get("switch", 0)
print("switch num: {}".format(num))
if num == 0:
print("case num: {}".format(num))
return
list2 = []
flag = -1
for word in words:
if word == "switch":
list2.append(0)
flag += 1
elif word == "case":
list2[flag] += 1
else:
continue
print("case num: ", end="")
print(" ".join(str(x) for x in list2))
return fWords
Fifth, I also used the traversal way to search keywords. Thinking over, I find that Q3 and Q4 can be solved together.The differences between them is else and elseif. By the 'if' , I got the result.
def three_fourth_question():
fWords=first_second_question()
listf = []
num_if_else = 0
num_if_elseif_else = 0
for word in fWords:
if word == "if":
listf.append(word)
elif word == "elseif" and listf[-1] != "elseif":
listf.append(word)
elif word == "else":
if listf[-1] == "elseif":
listf.pop()
listf.pop()
num_if_elseif_else += 1
elif listf[-1] == "if":
listf.pop()
num_if_else += 1
print("if-else num: {}".format(num_if_else))
print("if-elseif-else num: {}".format(num_if_elseif_else))
return
import timeit
def fun():
for i in range(100000):
a = i * i
print(timeit.timeit('fun()', 'from __main__ import fun', number=1))
import profile
def fun():
for i in range(100000):
a = i * i
print(profile.run('fun()'))
I put all the code that was outside the method inside the method, and the average speed increased by more than 0.003 seconds.
We studied Python in the first semester of freshman year. This lab is not difficult in the code part. I think the difficult parts are optimization and unit test. Though I tried to make code run quickly, I never do so carefully about every detail.
I learned how to use Github when I was learning Java. So it can save my time and I can improve my code.
I major in Electronic Engineering. The learning is more about hardware. I hope learn more knowleage about software by this course.
还没写完