Python数学flashcard程序

时间:2013-01-17 05:42:08

标签: python

我是编程新手,我正在尝试自学Python。我已经开始写一个小的flashcard脚本了。我的想法是,用户遇到问题并被提示提交答案。如果答案不正确,则提示用户再次尝试,依此类推,直到输入正确的答案。到目前为止,它按计划工作,但我不知道如何在输入正确的答案后重新开始。 我想我还需要包含允许用户退出游戏的一些方法,如果你想提出一个关于我很感激的建议,我也不知道该怎么做。 : - )

PS - 如果我的代码很蹩脚,我愿意接受建议。但我主要是寻找原始问题的答案。这是我第一次尝试编码所以我确信随着时间的推移,我会更好地编写更优雅的代码。

谢谢!

def add():
   from random import randint
   a = randint(1, 5)
   b = randint(1, 5)
   c = a + b
   print a,  '+',  b
   print 'What\'s the sum?'
   d = input()
   while d != c:
     print 'Wrong, try again!'
     d = input()
   else:
     print "Correct!"

2 个答案:

答案 0 :(得分:3)

首先,使用raw_input代替input,然后将其转换为整数。要回答您的问题,请询问用户输入:

play_again = raw_input('Play again? (y/n)')
if play_again.lower().startswith('y'):
    add()
return

input不安全,因为它被评估为本机代码,因此熟练的个人可能会入侵系统。 raw_input将输入视为字符串,您可以在结果上调用int()

但这仅适用于Python 2。对于Python 3,input很好 - 它取代了Python 2 raw_input

此外,函数中存在递归 - 尽管没有人可能会持久化以使堆栈溢出,但对于其他应用程序,迭代将是最好的方法。

将其转换为迭代循环是微不足道的(也是推荐)。将所有内容与while True循环中的导入区分开来。然后在循环结束时,添加以下代码:

play_again = raw_input('Play again? (y/n)')
if play_again.lower().startswith('y'):
    continue
break

您当然可以检查'n'而不是'y'并删除continue,将其替换为简单的break语句。

请注意,您还可以将if语句替换为不太可读:

if raw_input('Play again? (y/n)').lower().startswith('y'):  # or 'n'

摆脱中间play_again变量。虽然我不会牺牲可读性的可读性。

答案 1 :(得分:0)

在Python 3中(用于输入):

我稍微修改了你的代码(添加"()"用于print和int以便进行比较工作。没有检查你是否输入了非int)

def add():
   from random import randint
   a = randint(1, 5)
   b = randint(1, 5)
   c = a + b
   print (a,  '+',  b)
   d = int(input('What\'s the sum?'))
   while d != c:
     print ('Wrong, try again!')
     print (a,  '+',  b,' ? ')
     d = int(input())
   else:
     print ("Correct!")


while True:
    add()
    if input('Continue (O/N) ? ') == 'N':
        break

我还在循环中打印了添加内容,因为许多错误的答案可以清除最初的问题。

如上所述,初始循环执行您的功能,直到您键入' N'。 如果用户想要退出,您可以在添加循环中添加正确的答案。