【问题标题】:def function syntax error in Python 3Python 3 中的 def 函数语法错误
【发布时间】:2015-06-23 19:13:09
【问题描述】:

我正在自学编码,目前正在研究掷骰子作为一个学习项目。我现在遇到了一个奇怪的障碍。我的代码中的第四个“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()

【问题讨论】:

  • 首先,不要尝试将 Python 发布为代码 sn-ps;仅适用于 JavaScript。我会编辑它。
  • 为了将来参考,当您遇到错误时,您可以通过包含堆栈跟踪来使潜在响应者的生活更加轻松,因为它会准确显示错误的位置。
  • 作为一般规则,在 Python 中,当您在看起来完全有效的行上获得 SyntaxError 时,请向上查看是否缺少 )(或偶尔会出现 @987654324 @ 或 })。这是一个非常常见的错误——缺少) 意味着它试图将下一行解释为上一行中表达式的一部分,并且您不能在表达式中间抛出def。您可能还想考虑获得一个更好的编辑器来帮助您平衡括号;它们对几乎所有编程语言都很有用。
  • 对不起,你知道我以前没有做过很多编码,请原谅我的无知。
  • 我试图找到一个好的 dup 将其链接到,但看起来我们现在正在将它们作为拼写错误关闭。真可惜,因为在某个地方有一个解释会很好……但我想我会同意的。

标签: python function python-3.x syntax-error


【解决方案1】:

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

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

【讨论】:

  • 是的,就是这样,我在打印命令上没有右括号,只是让字符串保持打开状态。谢谢你:)
  • 没问题。欢迎使用 Python!
【解决方案2】:

您缺少 2 个右括号 ):

(str(total)

请尝试以下方法:

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

【讨论】:

    【解决方案3】:

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

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

    我已经压缩了gen() 函数,使用dictchoice 字母(可以是大写或小写)转换为边数。

    #!/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。如果您需要帮助,请提出一个新问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多