如何让这个程序在Python中重新开始?

-1 投票
5 回答
8006 浏览
提问于 2025-04-15 14:32

我觉得这个词应该是“递归”,而不是“重新开始”。我写了一个程序来提高我早上的乘法技能。我可以让它给我出一个乘法题,但我该怎么让它再问我一个呢?

from random import randint

print 'Good Morning Pete!'

X = randint(0, 10)

Y = randint(0, 10)

A = X * Y

Z = int(raw_input('%i * %i = ? ' % (X, Y)))

count = 0

if Z == A:
    count += 1
    print 'Good Job!'
else:
    print 'Sorry!'


if count == '10':
    print 'Time to kill \'em'

我该怎么让它给我出一个新的问题让我来解答呢?我还是个初学者。谢谢大家!

5 个回答

1

循环?你可以看看 for 语句和 range() 函数。它们在 Python教程里。

另外,你也可以看看你正在用来学习编程的书的下一章。

2

我想你想要的应该是这样的

from random import randint

print 'Good Morning Pete!'

count = 0

while True:
    X = randint(0, 10)
    Y = randint(0, 10)
    A = X * Y
    Z = int(raw_input('%i * %i = ? ' % (X, Y)))

    if Z == A:
        count += 1
        print 'Good Job!'
    else:
        print 'Sorry!'


    if count == 10:
        print 'Time to kill \'em'
        break
3

Pete,这里其实不需要用到递归,只需要用一个循环就可以了。

我建议你把这个程序的大部分逻辑(也就是问乘法问题和检查答案的部分)放到一个函数里,比如叫做 One Problem()。这个函数可以返回0表示你答错了,返回1表示你答对了,返回-1表示你输入了某个键想要停止。(顺便说一下,这个函数是为了帮助你整理程序结构,让它更易读,但并不是引入循环的必要条件。你完全可以把这些内容放在循环里面。另外,你也应该知道在Python中还有其他类型的循环,比如while循环。)

然后在你的主程序部分,你只需要写类似这样的代码:

GoodReplyCtr = 0
for i in range(0, 10):  # or 100 or 1000 if you feel ambitious...
   cc = OneProblem()
   if cc < 0:
        break
   GoodReplyCtr += cc

print(GoodReplyCtr)

递归的概念(这里不需要用到)是指一个函数自己调用自己。这种做法在处理图形(比如你电脑C盘的文件夹结构)或者某些数学问题时很常见。通常在学习编程语言的初期,我们不需要涉及递归,但当你掌握了一些基础后,可能会发现它非常有用(有时候也挺有挑战性的 ;-))。

继续加油!数学和Python都很酷。

编辑:最后一个小技巧:

你可能会发现有些乘法表需要多练习,而有些则不需要。与其使用randint,你可以用随机模块中的random.choice()方法来偏向某些数字或者排除其他数字。例如:

import random
X = random.choice((2, 3, 4, 6, 7, 8, 9, 7, 9))  # see, no 0, 1,or 5 but more chance to get 7 or 9

撰写回答