2009-09-23 3 views
-1

Я считаю, что слово «рекурсия» вместо «начала». Я создал эту программу, чтобы оттачивать свои навыки умножения утром. Я могу заставить его дать мне проблему с умножением, но как мне заставить его спросить меня еще один?Как я могу запустить эту программу в python?

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' 

Как я могу заставить его выплюнуть новую проблему для меня? Я новичок. Спасибо всем!

+0

Вы на самом деле не говорить о рекурсии, где результат операции зависит от повторения операции с, предполагается, что другой вход. Факториалы определяются рекурсивно (где n! = N * (n-1)!). –

+2

Фактически факториалы - один очень плохой пример для рекурсии, поскольку они более эффективны как петля. – freiksenet

+3

Факториалы - это классический пример рекурсии, даже если они более эффективно реализованы как циклы. –

ответ

3

Пит, ты не нужен рекурсию в этом случае, а лишь петлю.

Предлагаю вам поместить основную часть логики этой программы (часть, которая задает проблему с множественностью и проверит ваш ответ), в функцию. Скажите одну проблему(). Эта функция может вернуть 0, если вы ответили неправильно, 1, если вы ответили правильно, и -1, если вы ввели какой-то ключ, указывающий, что вы хотите остановить. (BTW, эта функция вводится, чтобы помочь вам структурировать программу, сделать ее более понятной, но она не нужна для введения цикла, вы можете сохранить все это внутри цикла. Кроме того, вы должны знать, что существуют другие конструкции цикла в питона, для exampe в то время как петли)

Тогда вам просто необходимо в главном разделе что-то подобное:.

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 :) или с некоторыми математическими проблемами. Обычно нам не нужно освещать рекурсию на ранних этапах изучения концепций компьютерных языков, но как только вы хорошо овладеете вещами, вы можете найти ее весьма полезной (и сложной во времени ;-))

Храните у нее! Математика и питон классные.

Edit: Последний трюк:

Вы можете обнаружить, что вы должны работать на некоторых умножения таблиц больше, чем другие. Вместо использования 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 
+0

спасибо за представление идеи создания функции. Хороший ответ тоже! – Pete

1

Петля? См. Инструкцию for и функцию range(). Они находятся в Python tutorial.

И вы можете прочитать следующую главу в любой книге, которую вы используете, чтобы научить себя программированию.

0

включить в цикл, вы можете добавить это в начале вашего кода:

бега = True в то время как True: // Добавить свой код здесь

//Add this to the end of your code: 

print 'Another problem? Enter y or n' 
    answer = raw_input().lower() 
    if answer == 'n': 
     running = False 
     break 
    elif answer == 'y': 
     running = True 

это позволит пользователю выбирать, хотите ли они каждый раз, когда им нужна другая проблема.

0

Я согласен на 100% с теми, кто сказал, что это нехороший случай для рекурсии, но требует вместо этого цикла.Однако, ради показа, как это может быть сделано, я отправляю код ниже:

import random 
def do_mult(num_questions): 
    x = random.randint(0, 10) 
    y = random.randint(0, 10) 
    a = x * y 
    z = int(raw_input('%i * %i = ?' % (x, y))) 
    if z == a: 
     print 'good job!' 
    else: 
     print 'sorry!' 
    if num_questions > 1: 
     do_mult(num_questions - 1) 

do_mult(10) 
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