Python 3 中的 def 函数语法错误

def function syntax error in Python 3

我正在自学编码,目前正在将掷骰子作为一个学习项目。我现在遇到了一些奇怪的问题。我代码中的第四个 'def',无论它实际上是什么(我已经尝试过几个都可以单独工作),它总是被标记为语法错误。这是我拥有的:

import random

def mult():
    print('How many dice would you like to roll?')
    multiplier = input()
    mod()

def mod():
    print('What modifier, if any, would you like to assign?')
    modifier = input()
    result()

def result():
    total = (roll * multiplier) + modifier
    print('Your result is' 
    (str(total)

def menuscreen(): 
    print("Welcome to Jack's dice roller. What kind of die would you like to roll?")
    print("")
    print("A. d2")
    print("B. d4")
    print("C. d6")
    print("D. d8")
    print("E. d10")
    print("F. d12")
    print("G. d20")
    print("H. d100")

def gen():

    menuscreen()

    if input() == 'a' or 'A':
        roll = random.randint(1,2)
        mult()

    if input() == 'b' or 'B':
        roll = random.randint(1,4)
        mult()

    if input() == 'c' or 'C':
        roll = random.randint(1,6)
        mult()

    if input() == 'd' or 'D':
        roll = random.randint(1,8)
        mult()

    if input() == 'e' or 'E':
        roll = random.randint(1,10)
        mult()

    if input() == 'f' or 'F':
        roll = random.randint(1,12)
        mult()

    if input() == 'g' or 'G':
        roll = random.randint(1,20)
        mult()

    if input() == 'h' or 'H':
        roll = random.randint(1,100)
        mult()

def queryque():

    print('Would you care to roll again?')

    if input == 'yes':
        gen()

    if input == 'no':
        end

gen()

您的 result() 定义末尾似乎缺少两个右括号。你可能想要这样的东西:

def result():
    total = (roll * multiplier) + modifier
    print('Your result is ' + str(total))

您缺少 2 个右括号 ):

(str(total)

请尝试以下操作:

def result():
    total = (roll * multiplier) + modifier
    print 'Your result is' + str(total)

Pencil Von Radiergummi 和 A.J 已经解决了提示您问题的语法错误,但正如我在对您的问题的评论中提到的,您的代码还有其他各种问题,主要问题是函数中创建的变量是local,也就是说它们存在于函数内部,在其他函数中是看不到的。

srekcahrai 试图解决 那个 问题,但他发布的代码(目前)存在各种问题(包括 print() 调用中的语法错误result() 函数)。所以这是 srekcahrai 答案中代码的修改版本。我已经修复了代码中的各种错误,但它仍然不完美——它确实应该对输入进行错误检查,但至少它可以运行。

我通过使用 dictchoice 字母(可以是大写或小写)转换为边数来压缩 gen() 函数。

#!/usr/bin/env python

import random

def mod():
    modifier = int(input("What modifier, if any, would you like to assign? "))
    return modifier

def mult():
    multiplier = int(input("How many dice would you like to roll? "))
    return multiplier

def result(roll, multiplier, modifier):
    total = (roll * multiplier) + modifier
    print("Your result is {0}".format(total))

def menuscreen(): 
    print("Welcome to Jack's dice roller.\n")

    print("A. d2")
    print("B. d4")
    print("C. d6")
    print("D. d8")
    print("E. d10")
    print("F. d12")
    print("G. d20")
    print("H. d100")

def gen():
    menuscreen()
    choice = input("What kind of dice would you like to roll? ")
    kinds = {
        "A":2, "B":4, "C":6, "D":8,
        "E":10, "F":12, "G":20, "H":100
    }
    sides = kinds[choice.upper()]
    multiplier = mult()
    modifier = mod()
    roll = random.randint(1, sides)
    result(roll, multiplier, modifier)

def main():
    while True:
        gen()
        if input("Would you care to roll again? ") != "yes":
            print("Goodbye")
            break

if __name__ == "__main__":
    main()

您的 result() 函数中的逻辑有点奇怪,但我为这个程序保留了它。实际上,您的程序应该使用循环来滚动骰子指定的次数,每次通过循环将结果添加到 total。如果您在这方面需要帮助,请提出一个新问题。