Это мой первый пост о переполнении стека, и я надеюсь произвести хорошее впечатление.
Я работаю над игрой в угадывание чисел в python, чтобы промокнуть ногой от юнит-теста, но наталкиваюсь на глупую головоломку.
Проблема в том, что я хочу создать класс юнит-теста, который проверяет следующие вещи
- Соответствует ли сгенерированный номер предполагаемому числу
- Что делает программа если вы вводите в письме
- Вы видите пользовательские ошибки, созданные при возникновении ошибки (в блоке try / Кроме)
Ссылка на мой проект Github здесь -> https://github.com/robpedersendev/python-number-guessing-game
Мой файл main.py ниже
import random
import sys
def guessingGame(number, guess): # Answer and guess was placed here so as to allow the test to insert
# its own values into the game, but that is not working
while true:
try:
guess = input(
f"Number guesser.\t\t\n {name} choose a number between "
f"{start} and {end}. Enter guess? : ")
guess = int(guess)
if guess < number:
print("\n\nThat number is a tad low\n\n")
elif guess > number:
print("\n\nThat number is a tad high\n\n")
else:
print("\n\nCongrats, you chose the right number!\n\n")
break
except (TypeError, ValueError):
print("Sorry, numbers only please")
guess = str(f"\'{guess}\' Which is an invalid character")
continue
except (UnboundLocalError):
print("Sorry, numbers only please")
continue
finally:
print(f"{name}, your last successful guess was {guess}")
if __name__ == "__main__":
true = True
start = int(sys.argv[1])
end = int(sys.argv[2])
number = random.randrange(start, end) # Selects the winning number
name = input("\t\t\t\t\nHello stranger, whats your name? ")
guessingGame()
Мой файл test.py выглядит как
import unittest
import main
class TestMain(unittest.TestCase):
def test_input(self):
true = True
number = 5
guess = 5
result = main.guessingGame(number, guess)
self.assertEqual(result)
if __name__ == "__main__":
unittest.main()
Я получаю сообщение об ошибке
Traceback (most recent call last):
File "c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\projects\python-number-guessing-game\test.py", line 10, in test_input
result = main.guessingGame(number, guess)
File "c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\projects\python-number-guessing-game\main.py", line 6, in guessingGame
while true:
NameError: name 'true' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
[Done] exited with code=1 in 0.375 seconds
Сообщение об ошибке
Я знаю, что мне многое предстоит сделать и многому научиться, но я надеюсь получить полезные советы!
ОБНОВЛЕНИЕ:
Хорошо, я понял проблему (вроде).
Проблема в моем файле main.py Мне нужно иметь этот
true = True
def guessingGame(number, guess, name='bob', start=1, end=20):
while true:
try:
# guess = input(
# f"Number guesser.\t\t\n {name} choose a number between "
# f"{start} and {end}. Enter guess? : ")
guess = int(guess)
if guess < number:
print("\n\nThat number is a tad low\n\n")
elif guess > number:
print("\n\nThat number is a tad high\n\n")
Мой файл test.py
import unittest
import main
class TestMain(unittest.TestCase):
def test_input(self):
number = 5
guess = 5
start = 1
end = 20
name = "bob"
result = main.guessingGame(number, guess)
self.assertEqual(guess, number)
if __name__ == "__main__":
unittest.main()
Мне нужно было предварительно определить значения и закомментируйте первый маленький блок кода. Как только я это сделал, мой тест прошел !! Любые идеи, как обойти эту часть, или это был плохой дизайн с моей стороны?