ребята. Я программирую игру NIM по следующим правилам:
- Начните с n шариков
- по очереди удаляет от 1 до половины шариков (в настоящее время) в стопке
- Проигравший забирает последний мрамор / с
Я рандомизировал начальное количество шариков. Я определил значение «take» как случайное целое число от 1 до половины стопки. То, как я это сделал, было
nHalf = int(nNumMarbles/2)
nCTake = int(random.randrange(1,nHalf))
Я сделал это так, чтобы половина нечетного числа округлялась вниз (что и происходит). Проблема возникает в конце игры, когда пользователь снизил nNumMarbles до 2, и компьютер должен nCTake случайное число от 1 до nHalf - то есть от 1 до 1. Вот как игра шла, когда он был запущен (ошибка внизу):
Python 3.6.3 (v3.6.3: 2c5fed8, 3 октября 2017, 18:11:49) [MSC v.1900 64
бит (AMD64)] на win32 Введите «copyright», «credits» или «license ()» для
больше информации.
============ RESTART: C: /Users/Name/Documents/CISPROG1/NIM.py ============ 14
Добро пожаловать в игру NIM! В куче 14 шариков. Вы и компьютер будете по очереди брать шарики из
куча Любой из вас может взять не более половины того, что осталось за
очередь. Проигравший берет последний мрамор / с.
Компьютер пойдет первым.
Очередь за компьютером! Компьютер занимает 3 шарика.
11 осталось!
Твоя очередь! Возьмите от 1 до 7 шариков:
2 Вы взяли 2 шарика.
9 осталось!
Очередь за компьютером! Компьютер занимает 1 шарик.
8 осталось!
Твоя очередь! Возьмите от 1 до 4 шариков:
1 Вы взяли 1 шарик.
7 осталось!
Очередь за компьютером! Компьютер занимает 2 шарика.
5 осталось!
Твоя очередь! Возьмите от 1 до 3 шариков:
1 Вы взяли 1 шарик.
4 осталось!
Очередь за компьютером! Компьютер занимает 1 шарик.
3 осталось!
Твоя очередь! Возьмите от 1 до 2 шариков:
1 Вы взяли 1 шарик.
2 осталось!
Traceback (последний вызов был последним): File
«C: /Users/Name/Documents/CISPROG1/NIM.py», строка 27, в
nCTake = int (random.randrange (1, nHalf)) Файл "C: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Python36_64 \ lib \ random.py", строка
198, в рандоме
повысить ValueError («пустой диапазон для randrange () (% d,% d,% d)»% (istart, istop, width)) ValueError: пустой диапазон для randrange () (1,1,
0)
... и вот моя программа:
import random
import sys
import time
nNumMarbles = int(random.randrange(10,100))
print(str(nNumMarbles))
print("Welcome to the game of NIM! \n"
"There are " + str(nNumMarbles) + " marbles in the pile. \n"
"You and the computer will take turns taking marbles from the pile. \n"
"Either of you can take at most half of what remains per turn. \n"
"The loser takes the last marble/s. \n")
#let 1 --> computer goes first, 2 --> user goes first
nFirst = random.randint(1,2)
if nFirst == 1:
print("The computer will go first. \n")
else:
print("You will go first. \n")
#Game progression if Computer goes first (only case I am testing)
if nFirst == 1:
while nNumMarbles > 0:
#Computer's turn:
nHalf = int(nNumMarbles/2)
nCTake = int(random.randrange(1,nHalf))
nNumMarbles = nNumMarbles - nCTake
print("Computer's turn! Computer takes " + str(nCTake) + " marbles. \n")
if nNumMarbles == 0:
print("The computer took the last marble! You win!")
time.sleep(3)
exit()
else:
pass
print(str(nNumMarbles) + " left! \n")
#User's turn:
print("Your turn! Take between 1 and " +str(nHalf) + " marbles: \n")
nUTake = int(input())
nNumMarbles = nNumMarbles - nUTake
print("You took " + str(nUTake) + " marbles. \n")
if nNumMarbles == 0:
print("You took the last marble! You lose!")
time.sleep(3)
exit()
else:
pass
print(str(nNumMarbles) + " left! \n")
Что пошло не так? Как это исправить, чтобы при диапазоне от 1 до 1 компьютер брал (nCTake) 1, последний шарик?