2014-11-23 3 views
-2
print("----BATTLESHIPS 3.0 By NAME----") 
print("") 
print("") 

size = input("Map size: ") 
size = size.replace(" ", "") 
print("------") 

keys = {1:'A',2:'B',3:'C',4:'D',5:'E',6:'F',7:'G',8:'H',9:'I',10:'J',11:'K',12:'L',13:'M',14:'N',15:'O',16:'P',17:'Q',18:'R',19:'S',20:'T',21:'U',22:'V',23:'W',24:'X',25:'Y',26:'Z'} 

#COORDINATES 
for h in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": 
    for b in range(1, int(size) + 1): 
    num = [h, b] 
    #print(num, end=' ') 
#COORDINATES 

dict = {} 
guess = input("Guess: ") 
guess = guess.lower() 
guess = guess.replace(" ", "") 
print("---") 

while guess: 

    if guess in dict: 
    print("Whoops! You've already hit that coordinate") 

    elif guess not in num: 
    print("Woah! That isn't a square!") 

    #elif int(guess[1:]) > 10 and int(guess[1:]) >= 1: 
    #print("Woah! That isn't a square!") 

    else: 
    dict[guess]=guess 
    print("Hit", guess.upper()) 

    guess = input("Guess: ") 
    guess = guess.lower() 
    guess = guess.replace(" ", "") 
    print("---") 

yn = input("List your guesses? (yes or no)") 
yn = yn.lower() 

if yn == "yes": 

    print("------") 
    print("GUESSES:") 

    print("---") 
    for i in dict: 
    print("-", i.upper()) 

elif yn == "no": 
    print("Ok, bye!") 
else: 
    print("---") 
    print("Please don't try and trick me. No scores for you!") 

У меня возникли проблемы с этим. Я должен создать программу, которая расширяет простую программу под названием Bomb's Away. Я пытаюсь ограничить размер карты, но не очень хорошо работаю. Все, что я вводил, говорит, что это не квадрат.Бомбы Away Линкорты

Изображение моей проблемы:http://i.imgur.com/iWZDxoH.png

Требования:

Bombs Away основано на броненосце игра, где два игрока угадать позиции на карте. Каждая позиция на карте определяется местоположением Letter-Number. В исходной задаче программа записывала каждую позицию, которую вводил игрок. Если координата была уже записана, программа сказала так.

  • Пользователь имеет право устанавливать размер карты. Карта всегда квадратная. Карта не может превышать число символов, найденных в нашем алфавите (то есть 26 символов). Наименьший размер для карты - 5 столбцов. Программа предложит пользователю указать размер карты.

  • При вводе размера карты программа гарантирует, что введено действительное число. Если нет, пользователю предоставляется сообщение для ввода действительного номера. Пользователь не может продолжать работу до тех пор, пока не будет принят приемлемый номер.

  • Если пользователь вводит правильные координаты, программа сохраняет эту информацию. Создайте творческий подход к представлению пользователю о том, что координаты были записаны.

  • Если пользователь вводит координаты, которые не существуют, творчески представляйте пользователю сообщение об этом. Эти координаты не должны храниться. Сохраняются только действительные координаты.

+0

Вы пробовали печать 'num'? Вы увидите, что в кодах не хватает. –

+0

У меня есть, но я не знаю, почему ... – Matt

ответ

0

Вы держите повторно связывании num на новый список объектов, один только с текущим h и b значения:

for h in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": 
    for b in range(1, int(size) + 1): 
     num = [h, b] 

В конце концов, если вы ввели 10 для размера, вы получите num = ['Z', 10]. Никакая координата, которую вводит пользователь, будет частью этого списка.

Вам нужно установить num пустой список и добавить новые координаты, где вы конкатенированная значение h и b в новую строку первым:

num = [] 
for h in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": 
    for b in range(1, int(size) + 1): 
     num.append(h + str(b)) 

Вы могли бы использовать более компактный код Python для дают те же результаты; используя список понимания и форматирование строк:

num = ['{}{}'.format(h, b + 1) 
     for h in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for b in range(int(size))] 

Вы, вероятно, хотите, чтобы ограничить высоту, а также ширину карты, так что вам нужно, чтобы ограничить количество букв, используемых; вы могли бы порезать те по размеру:

num = [] 
size = int(size) 
for h in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:size]: 
    for b in range(1, size + 1): 
     num.append(h + str(b)) 

Обратите внимание, что size всегда должны быть введены как число только!

+0

Теперь я получаю сообщение об ошибке: Traceback (последний последний звонок): Файл «program.py», строка 17, в для b в диапазоне (1 , int (size) + 1): ValueError: недействительный литерал для int() с базой 10: 'A1' – Matt

+0

@Matt: так почему вы ввели размер «A1» для размера карты? –

+0

О, больно! Я расскажу здесь о результатах. – Matt