嘿伙计们!我回来了另一篇文章我之前关于安全编码的文章。这次我们不打算讨论任何理论性的东西。几个月前,我用Python为我的学生编写了一个程序,以便他们可以练习基本的 BODMAS 问题。目的是程序应该生成随机问题集(用户输入的问题数量),然后检查输入的答案是否正确。现在,显然对我来说编码很容易,但是,我必须确保 5/2 = 2.5 与 2.500 一样正确。所以,我不能去匹配两个字符串。我不得不想出一个不同的解决方案。只是为了玩得开心,看看我的学生或志愿者是否可以在程序中提出漏洞,我专门编写了一个弱程序。现在,我修改了程序,让大家更容易识别其中的错误和漏洞。
现在,这是我希望你做的:
- 不要看代码。只需编译它,运行它,看看你是否能找出代码中的漏洞。
- 如果您无法找出第 1 步中的漏洞,或者即使您找到了,请查看程序代码并尝试找出您遗漏了哪些内容!
完成后,请评论您认为代码中的漏洞以及您将如何纠正它们!
开始了!!
给定输入:
3
6
-1
小型基本Python挑战程序
## Note: This program has been modified a bit for
## GeeksForGeeks article
import random,operator
print ('===========================================')
def randomCalc(i,j):
ops = {'+':operator.add,
'-':operator.sub,
'*':operator.mul,
'/':operator.truediv }
num = [1,2,3,4]
num1,num2 = num[i],num[j]
op = (list(ops.keys()))[i]
answer = round(ops.get(op)(num1,num2),3)
print('What is {} {} {}?\n'.format(num1, op, num2))
return answer
def askQuestion(i):
answer = randomCalc(i,i+1)
guess = float(input())
return guess == answer,answer
def quiz(numOfQues):
print('\nWelcome. This is a '+str(numOfQues)+' question math quiz.')
print('Your answer should be correct to three decimal places.\n')
score = 0
for i in range(numOfQues):
correct,ans = askQuestion(i)
if correct:
score += 1
print('Correct!\n')
else:
print('Incorrect! The correct answer is ' + str(ans)+'\n')
return ('Your score was {}/'+str(numOfQues)).format(score)
# Driver Code
print (quiz(3))
输出:
===========================================
Welcome. This is a 3 question math quiz
Your answer should be correct to three decimal places.
What is 1 + 2?
Correct!
What is 2 * 3?
Correct!
What is 3 - 4?
Correct!
Your score was 3/3
关于作者:
Vishwesh Shrimali是 BITS Pilani 机械工程专业的本科生。他满足了他的分支机构中没有教过的所有要求——白帽黑客、网络安全运算符和前竞争程序员。作为Python力量的坚定信仰者,他的大部分工作都使用同一种语言。每当他在编程、上课、观看 CSI Cyber 之余有一些时间时,他都会走很长一段路,默默地弹吉他。他的人生格言是——“享受你的生活,因为它值得享受!”
如果您还想在这里展示您的博客,请参阅 GBlog,了解 GeeksforGeeks 上的客座博客写作。