2016-09-11 2 views
-2

В приведенном ниже коде, я хотел бы запустить функцию roll(), после того, как: deal = input("Your Turn: "), но только до ограниченного числа циклов (52)Как я могу сделать цикл while только ограниченным количеством раз?

Как я могу добиться этого?

import random 

ydeal = random.randint(1,15) 
adeal = random.randint(1,15) 

yscore = 0 
ascore = 0 

def roll(): 
    if deal == "Deal": 
     print(ydeal, adeal) 
     if ydeal > adeal: 
      yscore + 1 
     elif ydeal < adeal: 
      ascore + 1 
     print(yscore, ascore) 

deal = input("Your Turn: ") 
roll() 

В качестве примечания: я заметил, что при печати yscore и ascore значение не изменяется в течение цикла, как я могу это исправить?

+0

Вопрос заключается в том, что, в отличие от справочной службы, то Q & призваны служить более широкой аудитории, чем просто плакат. объединение вопросов в один затрудняет их поиск, делая ваш вопрос бесполезным для других с той же проблемой. –

+0

, когда вы вводите 'roll', вы проверяете, есть ли' deal ==!! ''. если вы вставляете номер в качестве входа, программа вылетает, и если вы вставляете какую-либо другую строку, программа существует в порядке. Во всяком случае, я не совсем понимаю вашу цель. –

+0

Я хочу, чтобы точка была добавлена ​​к тем, кто больше, чем другой. Если его равное число не добавляет точки к каждому из очков игроков. – IMAGO

ответ

0

Не уверен, что ваш код, но вы можете ограничить количество петель путем добавления одного к n на каждом цикле, и использовать while n <= 52 (или любое другое значение):

n = 1 
while n <= 3: 
    word = "monkey" if n == 1 else "monkeys" 
    print(n, word) 
    if input("press Return to increase the number of monkeys ") == "": 
     n += 1 

print("\nOoops, we ran out of monkeys...") 

Тогда:

1 monkey 
press Return to increase the number of monkeys 
2 monkeys 
press Return to increase the number of monkeys 
3 monkeys 
press Return to increase the number of monkeys 

Ooops, we ran out of monkeys... 

В вашей ситуации:

n = 1 
while n <= 52: 
    deal = input("Your Turn: ") 
    roll() 
    n += 1 

Однако ваша ФУНКЦИИ п roll() не совсем работает должным образом:

  • ваш ydeal и adeal имеют фиксированные значения, и не будет меняться во время игры.
  • все, что вы делаете со своими переменными внутри функции не имеет эффекта снаружи, если вы не установите переменную global, или вы вернете что-то функцию.

Пример:

test = 5 

def add_one(var): 
    return var + 1 

test = add_one(test) 
print(test) 
> 6 

, но это уже другой вопрос :).

+0

@IMAGO, что вы подразумеваете под этим? –

+0

Я хочу, чтобы он рандомизировал номера после сделки. Таким образом, случайные Числа будут, 5 и 8. 8 выше, поэтому к аскоре добавляется 1 балл. И это продолжается для 52 циклов? – IMAGO

+0

@IMAGO, если вы установите 'while n <= 52:', тогда да, все, что вы положили в свой цикл, будет выполняться 52 раза. рандомизировать, запустить, что угодно. –

0

я заметил несколько проблем в вашем коде:

  1. Внутри функции roll() вы должны объявить, что вы хотите использовать глобальные переменные, а не две новые переменные, которые являются локальными по отношению к функции,
  2. Вы не назначаете приращение значению. Правильный способ сделать это: yscore += 1.

В конце я сообщаю вам обзорную версию вашего кода. В конце кода я вставил 52 итерации во время цикла.

import random 

ydeal = random.randint(1,9) 
adeal = random.randint(1,9) 

yscore = 0 
ascore = 0 

def roll(): 
    #Notify that the variables you want to use are not defined inside the function 
    global yscore 
    global ascore 
    if deal == "!": 
     print(ydeal) 
     print(adeal) 
     if ydeal > adeal: 
      yscore += 1 
     elif ydeal < adeal: 
      ascore += 1 
     print(yscore, ascore) 

deal = input("Your Turn: ") 
roll() 

#while loop 
max_iteration = 52 
counter = 0 

while counter < max_iteration : 
    counter += 1 
    print ("while: ", counter) 
+0

Спасибо, но я думаю, что ute неправильно поняла, я должен был объяснить. Я хочу, чтобы оценка добавилась к одной из переменных оценки для числа whoevers больше, чем другая. Я хочу, чтобы этот же процесс повторялся 52 раза. – IMAGO

+0

Просто перемещайте цикл while, если необходимо;) – acornagl

0

Я поддерживаю ответ Иакова, что вы можете ограничить количество петель путем добавления одного п на каждом цикле, и использовать в то время как п < = 52 (или любое другое значение). Я также прочитал много советов по программированию на http://ubuhanga.com, и я думаю, что они также могут помочь вам

+0

Ссылка на английский язык? – IMAGO

0

Как об этом с помощью range в соответствии с моим комментарием

import random 

def ydeal(): 
    return random.randint(1,15) 
def adeal(): 
    return random.randint(1,15) 

yscore = ascore = draw = 0 

def roll(): 
    global yscore, ascore, draw 
    if deal == "Deal": 
     for x in range(52): 
      yydeal = ydeal() 
      aadeal = adeal() 
      if yydeal > aadeal: 
       yscore += 1 
      elif yydeal < aadeal: 
       ascore += 1 
      else: 
       draw += 1 
      print("Score:", yscore, ascore, draw) 

deal = input("Your Turn: ") 
roll() 

Примечание: с помощью python2.7 вам потребуется изменить deal = input("Your Turn: ") для deal = raw_input("Your Turn: ")

0

Вот мое предыдущее предложение с петлей, а в правильном месте:

import random 

yscore = 0 
ascore = 0 
max_score = 52; 

def roll(): 
    #Notify that the variables you want to use are not defined inside the function 
    global yscore 
    global ascore 
    if deal == "!": 
     while (yscore < max_score and ascore < max_score) : 
      ydeal = random.randint(1,9) 
      adeal = random.randint(1,9) 
      print(ydeal) 
      print(adeal) 
      if ydeal > adeal: 
       yscore += 1 
      elif ydeal < adeal: 
       ascore += 1 
      print(yscore, ascore) 

deal = input("Your Turn: ") 
roll()