我是编程新手,我正在尝试自学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!"
答案 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'。 如果用户想要退出,您可以在添加循环中添加正确的答案。