2016-12-27 2 views
0

Я просто смотрел видео на YouTube, в котором они обсуждают математику игры в монополии, и, кроме всего прочего, они добавили код Python в поле загрузки, следовательно Я скачал его, чтобы попробовать ...Ошибка синтаксиса в компиляции Python (Mac Os - Terminal)

Это код:

import random 
from random import shuffle 

def monop(finish_order=6,games_order=3): 

    finish = 10**finish_order 
    games = 10**games_order 

    squares = [] 

    while len(squares) < 40: 
     squares.append(0) 

    # roll values are values from a six by six grid for all dice rolls 
    rollvalues = [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12] 

    games_finished = 0 

    while games_finished < games: 

     master_chest = [0,40,40,40,40,10,40,40,40,40,40,40,40,40,40,40] 
     chest = [i for i in master_chest] 
     shuffle(chest) 

     master_chance = [0,24,11,'U','R',40,40,'B',10,40,40,5,39,40,40,40] 
     chance = [i for i in master_chance] 
     shuffle(chance) 

     doubles = 0 

     position = 0 

     gos = 0 

     while gos < finish: 

      diceroll = int(36*random.random()) 

      if diceroll in [0,7,14,21,28,35]: # these are the dice index values for double rolls 
       doubles += 1 
      else: 
       doubles = 0 
      if doubles >= 3: 
       position = 10 
      else: 

       position = (position + rollvalues[diceroll])%40 

       if position in [7,22,33]: # Chance 
        chance_card = chance.pop(0) 
        if len(chance) == 0: 
         chance = [i for i in master_chance] 
         shuffle(chance) 
        if chance_card != 40: 

         if isinstance(chance_card,int): 
          position = chance_card 
         elif chance_card == 'U': 
          while position not in [12,28]: 
           position = (position + 1)%40 
         elif chance_card == 'R': 
          while position not in [5,15,25,35]: 
           position = (position + 1)%40 
         elif chance_card == 'B': 
          position = position - 3 

       elif position in [2,17]: # Community Chest 
        chest_card = chest.pop(0) 
        if len(chest) == 0: 
         chest = [i for i in master_chest] 
         shuffle(chest) 
        if chest_card != 40: 
         position = chest_card 

       if position == 30: # Go to jail 
        position = 10 


      squares.insert(position,(squares.pop(position)+1)) 

      gos += 1 

     games_finished += 1 


    return squares 

Вызывается: monopoly-v1.py

Теперь, когда я пытаюсь скомпилировать и запустить его в терминал I получить «проблемы».

Написав

python monopoly-v1.py 

в терминале, я не получаю сообщение об ошибке или предупреждение, но ничего не происходит ...

Если я пытаюсь с

python monopoly-v1.py 

, а затем

./monopoly-v1.py 

то вот что он говорит:

./monopoly-v1.py: Строка 1: ошибка синтаксиса около неожиданной лексемы (' ./monopoly-v1.py: line 1: Защиту monop (finish_order = 6, games_order = 3):»

Я не понять, что не так. Кстати, python или python3 одинаковы, я имею в виду: на первом шаге не появляется ошибка.

Любая идея?

Спасибо!

+1

Представленный вами код состоит из одной функции Python. Здесь нет кода, чтобы «заставить его идти». –

ответ

4

Этот код является просто определением функции и некоторым импортом. Он ничего не сделает, если вы не сделаете запустите эту функцию. Вот почему python script.py ничего не показывает.

Теперь, когда вы пытаетесь сделать это:

./script.py 

Оболочка пытается выполнить код Python, как если бы оно было написано в BASH (или, в более общем плане, как если бы это был сценарий оболочки) , что приводит к ошибке, конечно. Почему это так? Потому что это сказал для выполнения через структуру ./, но ничего не может найти для его выполнения с . Таким образом, он, наконец, пытается запустить его как скрипт оболочки.


1. И оболочка фактически выполняет поиск. Например, если вы приставкой код с помощью специального притон, он будет пытаться запустить его как код Python: #!python или #!env python или #!/usr/bin/env python или даже #!/path/to/python

2

Вы не называется любая функция, которую вы хотите выполнить.Если вы хотите, чтобы вызвать monop функции из командной строки, вы можете сделать это с помощью -c аргумента:

$ python -c 'from monopoly-v1 import monop; print monop(6, 3)' 

Обратите внимание, что синтаксис функции печати будет отличаться при использовании Python 3:

$ python -c 'from monopoly-v1 import monop; print(monop(6, 3))' 
+0

Я пробовал, и это дало мне ошибку синтаксиса ... –

+0

Какова ваша синтаксическая ошибка? Синтаксис командной строки здесь правильный. –

+0

Файл "", строка 1 монопольный монополист; print monop (6, 3) ^ SyntaxError: недействительный синтаксис –

2

просто добавить:

if __name__ == '__main__': 
    monop() 

в конце monopoly-v1.py

+0

Я пытался это сделать, но когда я его компилирую, он берет навсегда (без ответа ..) –

+0

@ForceBru Я не думаю, что ваш комментарий помог мне как-то. –

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