我是一个Python初学者编码员,试图制作一个“骰子滚轮”,你可以在其中选择骰子的大小,它在我的代码的第20行返回此错误
import sys
import random
import getopt
def main(argv):
dsize = ''
try:
opts, args = getopt.getopt(argv, "hi:o:", ["dsize="])
except getopt.GetoptError:
print("Roll.py -d <dsize>")
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('Roll.py -d <dsize>')
sys.exit()
# elif opt in ("-d", "--dsize"):
# dsize = arg
print('Die size is ', dsize)
print('roll is: '(random.randrange(1, dsize)))
if __name__ == "__main__":
main(sys.argv[1:])
如果我取消注释“elif opt in”和“dsize”我会得到这个
File "h:\Projects\Roll.py", line 17
elif opt in ("-d", "--dsize"):
^
SyntaxError: invalid syntax
错误可能就在这一行:
print('roll is: '(random.randrange(1, dsize)))
您正在尝试连接一个字符串和一个整数。有两种选择:
print('roll is: ', random.randrange(1, dsize))
或者
print('roll is: ' + str(random.randrange(1, dsize)))
或更改:
print('roll is: '(random.randrange(1, dsize)))
致:
print('roll is: {}'.format(random.randrange(1, dsize)))
或者:
print('roll is: %s'%random.randrange(1, dsize))
或者新的 f 字符串(仅适用于 python 版本 > 3.6):
print(f'roll is: {random.randrange(1, dsize)}')
完整代码:
import sys
import random
import getopt
def main(argv):
dsize = ''
try:
opts, args = getopt.getopt(argv, "hi:o:", ["dsize="])
except getopt.GetoptError:
print("Roll.py -d <dsize>")
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('Roll.py -d <dsize>')
sys.exit()
# elif opt in ("-d", "--dsize"):
# dsize = arg
print('Die size is ', dsize)
print('roll is: {}'.format(random.randrange(1, dsize))) # here i just use the first option
if __name__ == "__main__":
main(sys.argv[1:])
语法错误似乎是由
elif
行的缩进级别引起的。条件语句的格式应如下所示:
if opt == '-h':
print('Roll.py -d <dsize>')
sys.exit()
elif opt in ("-d", "--dsize"):
dsize = arg
这里有一个链接,其中包含 python 中的条件语句的一些示例:Python 中的流程控制
第 8 行,由于缩进不正确而出现错误。
try:
opts, args = getopt.getopt(argv, "hd:", ["dsize="])
except getopt.GetoptError:
print("Roll.py -d <dsize>")
sys.exit(2)
问题是因为您正在尝试查找与您想要查找的类型不同的元素。一个例子是尝试在现有字符串类型中查找 int 类型。
解决方案是将你的 int 转换为字符串。