Форум сайта python.su
0
Всем привет.
Занимаюсь по книге Майкла Доусона, нужно создать игру Блэкджек. Игра состоит из трех отдельных файлов:
def ask_number(question, low, high): response = None while response not in range(low, high): response = int(input(question)) return response
import games import cards ... def main(): ... names = [] number = games.ask_number("How many players? (1 - 7): ", low=1, high=8) for i in range(number): name = input("Enter player name: ") names.append(name)
def ask_number(question, low, high): response = None while response not in range(low, high): try: response = int(input(question)) except ValueError: print("Looks like it's not a number!") else: return response
Traceback (most recent call last): File "D:/My Projects/BlackJack.py", line 164, in <module> main() File "D:/My Projects/BlackJack.py", line 150, in main number = games.ask_number("How many players? (1 - 7): ", low=1, high=8) File "D:/My Projects/games.py", line 21, in ask_number response = int(input(question)) ValueError: invalid literal for int() with base 10: 's'
Отредактировано Wannabee (Июнь 22, 2015 12:56:33)
Офлайн
568
1. response not in range(low, high)
Это что такое? Для того чтобы определить, попадает ли число в интервал от 0 до миллиона, вы будете перебирать миллион значений? Конгениально!!!!
2.
WannabeeВот сигнатура функции
вызываю эту функцию непосредственно в модуле games.py и передаю ей неподходящее значение
Офлайн
568
WannabeeВесь код покажите, можно архивом
Уж совсем вариантов нет
Офлайн
0
1. response not in range(low, high)1. Я даже не знаю. А зачем мне перебирать миллион значений, не подскажите? Или бывали прецеденты партии в 21 очко на миллион игроков? Тут планируется максимум 7 игроков, и в основном коде границы перебора по-моему довольно четко определены и переданы функции. Будет максимум range(1,8):
Это что такое? Для того чтобы определить, попадает ли число в интервал от 0 до миллиона, вы будете перебирать миллион значений? Конгениально!!!!
number = games.ask_number("How many players? (1 - 7): ", low=1, high=8)
Вот сигнатура функции2. Это я понял, я неправильно сформулировал мысль. Проблема как раз с вводом с клавиатуры. Вот например когда функция ask_number() из games.py вызывается в главном файле blackjack.py, и она просит ввести число, чтобы установить количество игроков, то можно, допустим, “случайно” ввести букву, которую int(input(question)) не сможет преобразовать в числовой тип, и возникнет ValueError. Я добавил в функцию ask_number(question, low, high) конструкцию перехвата ValueError. То бишь чтобы если ввести букву, ValueError перехватывался и функция из модуля games.py опять просила ввести с клавиатуры число от 1 до 7. И так до тех пор, пока его не получит.
def ask_number(question, low, high)
какое такое такое неподходящее значение вы передаете? Ошибка возникает не на переданном значении, а на введенном с клавиатуры
Отредактировано Wannabee (Июнь 22, 2015 16:24:30)
Прикреплённый файлы:
Blackjack.rar (2,8 KБ)
Офлайн
568
WannabeeЯ то откуда знаю, ты ж перебираешь, а не я.
А зачем мне перебирать миллион значений, не подскажите?
Офлайн
568
Какая версия питона?
Офлайн
857
Wannabee
Код для игры составлял сам автор книги.
WannabeeВот это Доусон писал?while response not in range(low, high):
while not low <= response <= high:
WannabeeДа? И в чём смысл этого while'а? (Допустим, что это учебный while какой-то.)
Вот такая функция была изначально:def ask_number(question, low, high): response = None while response not in range(low, high): response = int(input(question)) return response
WannabeeНадо тебе сменить учебник, а то он научит такой вот бред делать.number = games.ask_number("How many players? (1 - 7): ", low=1, high=8)
Отредактировано py.user.next (Июнь 23, 2015 00:58:29)
Офлайн