2015-12-08 2 views
-3
from random import randint 
from time import sleep 

fight = False 

def start_up(): 
    print("Fight Simulator - Test Stages.") 
    userInput = str(input("Enter your name ")) 
    user_name = userInput 
    return user_name 

def intro(): 
    userName = start_up() 
    while True: 
     userInput = str(input("Welcome to the dojo, {}. To commence the first battle, type 'Start', or 'Begin'".format(userName))) 
     if userInput == "Start" or "start" or "Begin" or "begin": 
      return userInput 
     else: 
      print("Enter a valid response") 
      break 

def fight_commence(): 
    userInput = intro() 

    if userInput == "Start" or "start" or "Begin" or "begin": 
     fight = True 

     userHp = 100 
     opponentHp = 100 

     while fight == True: 
      userDmg = randint(0,100) 
      opponentDmg = randint(0,100) 

      opponentHp -= userDmg 

      if opponentHp <= 0: 
       opponentHp == 0 

      print("You did {} damage".format(userDmg)) 
      sleep(1) 
      print("Opponent has {} hp remaining".format(opponentHp)) 
      sleep(1) 

      if opponentHp <= 0: 
       print("You killed him!") 
       fight = False 
    else: 
     print("Enter a valid action") 

fight_commence() 

Так что по какой-то причине код не печатает («Введите действительный ответ»), когда дается ответ, отличный от «Пуск» или «Начало» или «Начало» или «Начало». Я хочу, чтобы он вернулся к пользовательскому этапу, но вместо этого он просто продолжает работать с программой, как будто все в порядке. Я не могу понять, где я испортился.Две проблемы с моим кодом до сих пор.

Во-вторых, я хочу opponentHp автоматически равное 0, когда провалы здоровья ниже 0. Например, когда opponentHp = -45, opponentHp должен быть равен 0.

Любая помощь приветствуется.

+1

Может помочь, если вы помечаете язык .... – epascarello

+0

дерьмо, это питон. –

+4

«Две проблемы с моим кодом до сих пор» - не очень конкретный/доступный для поиска заголовок. И ваша проблема - классика: 'if userInput ==« Start »или« start »или« Begin »или« begin »:' не делает то, что вы думаете, это ... (Подсказка: прочитайте его как 'if (userInput == «Пуск») или «начать» или «начать» или «начать»: ') –

ответ

-1

Условия (if-clause) являются неправильными. Вы должны повторить «userInput ==» для каждого or. Или, более сжато это:

userInput.lower() in ["start", "begin"] 
+1

Вы можете отредактировать, чтобы указать, что это должно быть предложение 'if' – Tgsmith61591

1

Ну большая проблема с тестированием «правильный ввод» путь тестирования.

if userInput == "Start" or "start" or "Begin" or "begin" 

Это недействительное условие python. Вместо этого сделайте что-нибудь вроде этого:

if userInput in ["Start", "start", "Begin", "begin"] 

Это сравнение происходит дважды, и это не хорошо. Для opponenthp быть 0, вы в настоящее время это ваше заявление и результат:

if opponentHp <= 0: 
    opponentHp == 0 

Это состояние прекрасно, но == в действие еще один условный оператор, вам необходимо изменить его:

if opponentHp <= 0: 
    opponentHp = 0 

Сложение Кроме того, в дополнение к перечисленным выше пунктам, когда вы используете break заявление вы закончится бесконечный цикл настроенному и конец функции без возвращаемого значения, вы можете тусклый t рассмотреть вопрос об изменении его на continue или pass или просто удалить его.

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