print("welcome to the maths game")
import random
score = 0
print("Question One")
numberOne=random.randint(1,12)#These two randomly generate 2 numbers for the question
numberTwo=random.randint(1,12)      
question = str(numberOne)+ " x " + str(numberTwo) + " = " 
answer = int(input(question))                             

if answer == numberOne*numberTwo:
    print("Well Done It's Correct, Next Question")
    score + 1 #puts the score plus one
else:
    print("Better Luck Next Time, Next Question")
print("Question Two")
numberOne=random.randint(1,12)    
numberTwo=random.randint(1,12)
question = str(numberOne)+ " x " + str(numberTwo) + " = " 
answer = int(input(question))                             

if answer == numberOne*numberTwo:
    print("Well Done It's Correct, Next Question")
    score = score + 1
else:
    print("Better Luck Next Time, Next Question")
print("Question Three")
numberOne=random.randint(1,12)    
numberTwo=random.randint(1,12)
question = str(numberOne)+ " x " + str(numberTwo) + " = " 
answer = int(input(question))                             

if answer == numberOne*numberTwo:
    print("Well Done It's Correct, Next Question")
    score = score + 1
else:
    print("Better Luck Next Time, Next Question")
print("Question Four")
numberOne=random.randint(1,12)    
numberTwo=random.randint(1,12)
question = str(numberOne)+ " x " + str(numberTwo) + " = " 
answer = int(input(question))                             

if answer == numberOne*numberTwo:
    print("Well Done It's Correct, Next Question")
    score = score + 1
else:
    print("Better Luck Next Time, Next Question")
print("Question Five")
numberOne=random.randint(1,12)    
numberTwo=random.randint(1,12)
question = str(numberOne)+ " x " + str(numberTwo) + " = " 
answer = int(input(question))                             

if answer == numberOne*numberTwo:
    print("Well Done It's Correct, Thats The End")
    score = score + 1
else:
    print("Better Luck Next Time, Thats The End")

Мне нужно сократить этот код, поместив его в цикл. Однако, когда я пытаюсь, я не могу оставить вопрос один, два, три, четыре, пять в каждом абзаце. Это случайное генерирование 2-х чисел 5 раз для небольшого теста таблицы (назначение Python в моей школе).

0
user7380601 8 Янв 2017 в 15:05

3 ответа

Лучший ответ

Попробуйте это:

import random

print("welcome to the maths game")
score = 0

titles = map(lambda s: "Question %s" % s, ['One', 'Two', 'Three', 'Four', 'Five'])


def gen_randoms():
    return random.randint(1, 12), random.randint(1, 12)


for t in titles:
    print(t)
    num_one, num_two = gen_randoms()
    question = str(num_one) + " x " + str(num_two) + " = "
    answer = int(input(question))
    if answer == num_one * num_two:
        print("Well Done It's Correct, Next Question")
        score += 1  # puts the score plus one
    else:
        print("Better Luck Next Time, Next Question")

print("Your resulting score is %s" % score)
0
Minato 8 Янв 2017 в 12:20

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

import random

number_words = ['one', 'two', 'three', 'four', 'five']
score = 0

for x in range(5):
    print("Question {}".format(number_words[x]))
    numberOne=random.randint(1,12)    
    numberTwo=random.randint(1,12)
    question = "{} x {} = ".format(numberOne, numberTwo)
    answer = int(input(question))       

    if answer == numberOne*numberTwo:
        if x != 4:
            print("Well Done It's Correct, Next Question")
        else:
            print("Well Done It's Correct, Thats The End")
        score = score + 1
    else:
        if x != 4:
            print("Better Luck Next Time, Next Question")
        else:
            print("Better Luck Next Time, Thats The End")

print("This is not in the loop")
# Write non-looping code here
1
Community 23 Май 2017 в 12:01
import random
def int_to_en(num):
    # http://stackoverflow.com/questions/8982163/how-do-i-tell-python-to-convert-integers-into-words
    # @SiLent SoNG
    d = { 0 : 'zero', 1 : 'one', 2 : 'two', 3 : 'three', 4 : 'four', 5 : 'five',
          6 : 'six', 7 : 'seven', 8 : 'eight', 9 : 'nine', 10 : 'ten',
          11 : 'eleven', 12 : 'twelve', 13 : 'thirteen', 14 : 'fourteen',
          15 : 'fifteen', 16 : 'sixteen', 17 : 'seventeen', 18 : 'eighteen',
          19 : 'nineteen', 20 : 'twenty',
          30 : 'thirty', 40 : 'forty', 50 : 'fifty', 60 : 'sixty',
          70 : 'seventy', 80 : 'eighty', 90 : 'ninety' }
    k = 1000
    m = k * 1000
    b = m * 1000
    t = b * 1000
    assert(0 <= num)
    if (num < 20):
        return d[num]
    if (num < 100):
        if num % 10 == 0: return d[num]
        else: return d[num // 10 * 10] + '-' + d[num % 10]
    if (num < k):
        if num % 100 == 0: return d[num // 100] + ' hundred'
        else: return d[num // 100] + ' hundred and ' + int_to_en(num % 100)
    if (num < m):
        if num % k == 0: return int_to_en(num // k) + ' thousand'
        else: return int_to_en(num // k) + ' thousand, ' + int_to_en(num % k)
    if (num < b):
        if (num % m) == 0: return int_to_en(num // m) + ' million'
        else: return int_to_en(num // m) + ' million, ' + int_to_en(num % m)
    if (num < t):
        if (num % b) == 0: return int_to_en(num // b) + ' billion'
        else: return int_to_en(num // b) + ' billion, ' + int_to_en(num % b)
    if (num % t == 0): return int_to_en(num // t) + ' trillion'
    else: return int_to_en(num // t) + ' trillion, ' + int_to_en(num % t)
    raise AssertionError('num is too large: %s' % str(num))

def get_question(num, *args):
  # param: num, convert int to word (instead list = ['one', 'two', 'three', 'four', 'five'.......])
  # your game should be scalable for N number of questions

  q_header = 'Question {0}:'.format(int_to_en(num)) # convert and add it to string, use {n} with index, faster than without
  r_N_a, r_N_b = [random.randint(1,12) for __ in range(2)] # to random num
  q_str = '{0} x {1} = '.format(r_N_a, r_N_b) #  creating question string  
  return (q_header, r_N_a*r_N_b, q_str) # return, you could now call get_question method from outside, if you need a question block in your other modules 

def run_game(num, score = 0):
  for n in range(num):
    q_header, expectation, q_str = get_question(n)
    print (q_header)
    answer = int(input(q_str))
    if not answer == expectation:
      print ('wrong')
    else:
      score += 1
      print ('next')

  return score

score = run_game(3) # 3 questions

block = [get_question(n) for n in range(50)] # 50 question/solution block
print (block)

print (block[24])    

[('Question zero:', 40, '5 x 8 = '), ('Question one:', 80, '8 x 10 = '), ('Question two:', 49, '7 x 7 = '), ('Question three:', 2, '1 x 2 = '), ('Question four:', 60, '12 x 5 = '), ('Question five:', 77, '7 x 11 = '), ('Question six:', 144, '12 x 12 = '), ('Question seven:', 77, '7 x 11 = '), ('Question eight:', 88, '8 x 11 = '), ('Question nine:', 5, '1 x 5 = '), ('Question ten:', 40, '5 x 8 = '), ('Question eleven:', 72, '12 x 6 = '), ('Question twelve:', 24, '4 x 6 = '), ('Question thirteen:', 72, '9 x 8 = '), ('Question fourteen:', 1, '1 x 1 = '), ('Question fifteen:', 2, '2 x 1 = '), ('Question sixteen:', 24, '6 x 4 = '), ('Question seventeen:', 80, '8 x 10 = '), ('Question eighteen:', 36, '4 x 9 = '), ('Question nineteen:', 99, '11 x 9 = '), ('Question twenty:', 42, '6 x 7 = '), ('Question twenty-one:', 12, '12 x 1 = '), ('Question twenty-two:', 96, '12 x 8 = '), ('Question twenty-three:', 50, '5 x 10 = '), ('Question twenty-four:', 72, '12 x 6 = '), ('Question twenty-five:', 80, '8 x 10 = '), ('Question twenty-six:', 24, '3 x 8 = '), ('Question twenty-seven:', 88, '8 x 11 = '), ('Question twenty-eight:', 108, '9 x 12 = '), ('Question twenty-nine:', 12, '3 x 4 = '), ('Question thirty:', 144, '12 x 12 = '), ('Question thirty-one:', 2, '2 x 1 = '), ('Question thirty-two:', 56, '8 x 7 = '), ('Question thirty-three:', 32, '8 x 4 = '), ('Question thirty-four:', 5, '1 x 5 = '), ('Question thirty-five:', 16, '4 x 4 = '), ('Question thirty-six:', 84, '7 x 12 = '), ('Question thirty-seven:', 44, '11 x 4 = '), ('Question thirty-eight:', 7, '7 x 1 = '), ('Question thirty-nine:', 54, '9 x 6 = '), ('Question forty:', 22, '2 x 11 = '), ('Question forty-one:', 77, '7 x 11 = '), ('Question forty-two:', 20, '5 x 4 = '), ('Question forty-three:', 9, '1 x 9 = '), ('Question forty-four:', 8, '2 x 4 = '), ('Question forty-five:', 24, '8 x 3 = '), ('Question forty-six:', 15, '5 x 3 = '), ('Question forty-seven:', 24, '8 x 3 = '), ('Question forty-eight:', 30, '6 x 5 = '), ('Question forty-nine:', 96, '12 x 8 = ')]

('Question twenty-four:', 110, '11 x 10 = ')
0
Ari Gold 8 Янв 2017 в 14:14