提问人:Understanding 提问时间:12/27/2016 最后编辑:Guillaume JacquenotUnderstanding 更新时间:12/27/2016 访问量:1457
Python 编译中的语法错误 (Mac Os - Terminal)
Syntax Error in Python compiling (Mac Os - Terminal)
问:
我刚刚在 YouTube 上观看了一个视频,他们在视频中讨论了大富翁游戏的数学原理,除此之外,他们还在下载框中添加了 Python 代码,因此我下载了它来尝试一下......
代码如下:
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
现在,当我尝试编译并将其运行到终端中时,我遇到了“问题”。
通过写作
python monopoly-v1.py
在终端中,我没有收到任何错误或警告,但它没有发生任何事情......
如果我尝试
python monopoly-v1.py
然后
./monopoly-v1.py
那么它是这样说的:
./monopoly-v1.py:第 1 行:意外令牌附近的语法错误 def monop(finish_order=6,games_order=3):'('
./monopoly-v1.py: line 1:
我不明白出了什么问题。顺便说一句,python 或 python3 是一样的,我的意思是:第一步没有出现错误。
有什么想法吗?
谢谢!
答:
此代码只是一个函数定义和一些导入。如果您不运行该函数,它将执行任何操作。这就是为什么不显示任何内容的原因。python script.py
现在,当您尝试执行此操作时:
./script.py
shell 尝试执行 Python 代码,就好像它是用 BASH 编写的一样(或者更一般地说,就好像它是 shell 脚本一样),这当然会导致错误。为什么会这样做?因为它被告知通过结构执行,但找不到任何内容来执行它1.因此,它最终尝试将其作为 shell 脚本运行。./
1. shell 实际上会进行搜索。例如,如果你在代码前面加上一个特殊的shebang,它会尝试将其作为Python代码运行:#!python或#!env python或#!/usr/bin/env
python甚至#!
/path/to/python
您尚未调用任何要执行的函数。如果要从命令行调用该函数,可以使用以下参数来实现:monop
-c
$ python -c 'from monopoly-v1 import monop; print monop(6, 3)'
请注意,如果使用 Python 3,print 函数语法会有所不同:
$ python -c 'from monopoly-v1 import monop; print(monop(6, 3))'
评论
只需添加:
if __name__ == '__main__':
monop()
在 monopoly-v1.py 年底
评论
下一个:如何在终端上滚动消息?
评论