📜  一个基本的Python编程挑战

📅  最后修改于: 2021-10-22 03:44:16             🧑  作者: Mango

嘿伙计们!我回来了另一篇文章我之前关于安全编码的文章。这次我们不打算讨论任何理论性的东西。几个月前,我用Python为我的学生编写了一个程序,以便他们可以练习基本的 BODMAS 问题。目的是程序应该生成随机问题集(用户输入的问题数量),然后检查输入的答案是否正确。现在,显然对我来说编码很容易,但是,我必须确保 5/2 = 2.5 与 2.500 一样正确。所以,我不能去匹配两个字符串。我不得不想出一个不同的解决方案。只是为了玩得开心,看看我的学生或志愿者是否可以在程序中提出漏洞,我专门编写了一个弱程序。现在,我修改了程序,让大家更容易识别其中的错误和漏洞。

现在,这是我希望你做的:

  1. 不要看代码。只需编译它,运行它,看看你是否能找出代码中的漏洞。
  2. 如果您无法找出第 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 上的客座博客写作。