4

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

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!"
4

2 回答 2

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变量。尽管我不会为了可压缩性而牺牲可读性。

于 2013-01-17T05:48:09.853 回答
0

在 Python 3 中(用于输入):

我稍微修改了您的代码(添加了“()”用于打印,并添加了 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”。如果用户想退出,您可以在添加循环中添加正确答案。

于 2015-12-08T18:19:48.617 回答