2016-04-25 4 views
-2

Имея трудное время, выясняя, как функция while (True) должна быть установлена ​​в коде. Также не идея, если это не правильно использовать, как я пытаюсь Переберите игру, пока компьютер или пользователь не попадает нужное количество баллов (которые пользователь вводит в качестве раундов в начале)Непонимание цикла While (True) - Python 2.7

import random 


def main(): 

print 
print "----------------------------------" 
print "Welcome to Rock, Paper, Sciccors! " 
print "----------------------------------" 


rounds = input("How many points to win?: ") 

user_choice = input("Choose Rock = 1 , Paper = 2 or Sciccors = 3: ") 

user_score = 0 

computer_score = 0 



if user_choice == 1: 

    print "You chose Rock" 

elif user_choice == 2: 

    print "You chose Paper" 

elif user_choice == 3: 

    print "You chose Sciccors" 

else: 

    print " Wrong! Choose 1, 2 or 3!" 



computer_choice = random.randrange(1, 4) 


if computer_choice == 1: 

    print "Computer chose Rock" 

elif computer_choice == 2: 

    print "Computer chose Paper" 

elif computer_choice == 3: 

    print "Computer chose Sciccors" 


def checkResults(computer_choice, user_choice): 

    checkResults = computer_choice - user_choice 


    if computer_choice - user_choice == 0: 

     print("Draw!") 

     user_score += 1 

     computer_score += 1 

    elif computer_choice - user_choice == 1 or computer_choice - user_choice  == -2: 

     print("Computer wins") 

     computer_score += 1 

    elif computer_choice - user_choice == -1 or computer_choice - user_choice == 2: 

     print("You win!") 

     user_score += 1 


print (" Computer {} , You {}" .format(computer_score, user_score)) 

while(True): 

if computer_score == rounds or user_score == rounds: 

    main() 
else: 
    break 
+0

Можете ли вы обновить свой ответ кодом, который можно запустить без синтаксических ошибок? Также желательно удалить много пустых строк. – totoro

ответ

1

You может сделать это немного короче:

while computer_score == rounds or user_score == rounds: 

    ' Your code returning computer_score and user_score 

в основном while True бесконечный цикл, который может быть прекращена только с помощью break оператор или с помощью прерывания клавиатуры.

0

while True: - бесконечный цикл, который может быть остановлен только командой break. В вашем примере вы создали цикл, который будет бесконечно запускать метод main() (который вы определили ранее, указав def main():). Единственный раз, когда цикл завершится, - если вы убьете процесс (т. Е. С помощью диспетчера задач в Windows), или если computer_score и user_score оба становятся не равными rounds (это то, что ваш оператор else подразумевает от второй до последней строки). Когда это происходит, программа вызывает break, которая принудительно завершает цикл и перемещается ... в конец файла (который затем заканчивает программу).

Следует отметить, что использование петли while True ... break иногда нахмуривается программистами, поскольку оно не считается «элегантным». Это совершенно нормально код, чтобы сделать, но другой способ переписать последние несколько строк заключается в следующем:

while computer_score==rounds or user_score==rounds: 
    main() 

Это дает тот же результат, не работает цикл while до computer_score и user_score и не равны rounds. В этот момент цикл while завершается сам по себе и заканчивает программу, дойдя до конца файла.

Смежные вопросы