注释中的python语法无效

时间:2015-10-22 14:13:08

标签: python syntax comments python-idle

使用IDLE Python 3.4.3。这是一个脚本,为用户提供一个小测验,然后计算正确的数量。在我的脚本运行之前,我在注释中出现了无效的语法错误。以下是评论的全部代码。具体评论位于score = decimal.Decimal(score)

行下
score = amountright/7*100 """this takes the amount of questions the user got right, divides it by 7 (the total number of questions), then multiplies it by 100 to get a percentage correct and stores it in the variable score"""
import decimal """this will import a function to round off the final percentage to a whole number instead of an unnecessarily long decimal"""
score = decimal.Decimal(score)
"""this redefines the score variable as some sort of roundable decimal. the round() function in the line below will still function without this line, but it would print an unneeded .0 before the %"""
print ("You got " + str(amountright) + " out of 7 right, or " + str(round(score,0)) + "%.")
"""the round() function works by rounding the first argument to n places in the second argument"""

我运行它,得到无效的语法错误,然后突出显示单词score红色中的s和c。使用'对此没有任何影响。但是,当我运行这样的代码时:

"""
This redefines the score variable as some sort of roundable decimal. the round() function in the line
below will still function without this line, but it would print an unneeded .0 before the %
"""

它仍然会出现语法错误,但这次只突出显示score红色的s。 repr由unutbu的请求添加:

print ("Here is a quiz!\n") #starting prompt

useranswer = input("Question 1: What is 4+|6x1|? ")
#this is where the user enters their answer to the question

#the following 2 variables on lines 7 and 9 only need to be defined once
rightanswerresult = "Correct! Next question:\n" #tells the user they are correct
invalidanswerresult = "This is not a number. This is counted as a wrong answer.\n"
"""if the user does not answer with a number, this string will print telling them so and the question will
be counted wrong"""

amountright = 0 #this number increases every time the user answers a question correctly

if useranswer.isdigit(): #if the user's answer is a number, the code below runs
    if useranswer == "10":
    #this checks if the user's answer and the correct answer are the same, then runs the code below if they are"""
        print (rightanswerresult) #this prints the variable rightanswerresult described on line 7
        amountright += 1 #this will add the value one to the variable amountright described on line 13
    else: #if the user's answer and the correct answer are not the same, the code below runs
        print ("Wrong, it was 10. Next question:\n") #tells the user they were wrong
else: #if the user's answer is NOT a number, this runs
    print (invalidanswerresult) #this prints the varible invalidanswerresult described in line 9
#this pattern is repeated 5 more times. an altered process is used for the True/False question (#7)
useranswer = input("Question 2: What is (15/3) x 12? ")
if useranswer.isdigit():
    if useranswer == "60":
        print (rightanswerresult)
        amountright += 1
    else:
        print ("Wrong, it was 60. Next question:\n")
else:
    print (invalidanswerresult)

useranswer = input("Question 3: What is 20+24/12? ")
if useranswer.isdigit():
    if useranswer == "22":
        print (rightanswerresult)
        amountright += 1
    else:
        print ("Wrong, it was 22. Next question:\n")
else:
    print (invalidanswerresult)

useranswer = input("Question 4: Solve for x: 2x-1=5 ")
if useranswer.isdigit():
    if useranswer == "3":
        print (rightanswerresult)
        amountright += 1
    else:
        print ("Wrong, it was 3. Next question:\n")
else:
    print (invalidanswerresult)

useranswer = input("Question 5: What is the square root of 256? ")
if useranswer.isdigit():
    if useranswer == "16":
        print (rightanswerresult)
        amountright += 1
    else:
        print ("Wrong, it was 16. Next question:\n")
else:
    print (invalidanswerresult)

useranswer = input("Question 6: What is 7x7+7/7-7? ")
if useranswer.isdigit():
    if useranswer == "1":
        print (rightanswerresult)
        amountright += 1
    else:
        print ("Wrong, it was 1. Next question:\n")
else:
    print (invalidanswerresult)
#the question below appears different because it is True/False and the last question
useranswer = input("Question 7: True or False: |3|=98/2 ").lower() #as before, the user is asked a question
if useranswer == "false": #checks if user's answer is false, and runs code below if it is
    print ("You're right! Your results are below:\n") #this tells the user they are correct then shows them their final score
    amountright += 1 #as before, this will add the value one to the variable amountright described on line 8
if useranswer == "true": #checks if user's answer is true, and runs code below if it is
    print ("Actually, its false. Your results are below:\n") #this tells the user they are wrong then shows them their final score
elif useranswer != "false" and useranswer != "true": #if the user's answer is not true or false, this code runs
    print ("It seem you didn't enter true or false. Maybe you made a spelling error? Anyways, your results are below:\n")
    """tells user their answer is invalid then shows final score"""
#all questions have been completed. below is the final score calculation
score = amountright/7*100 """this takes the amount of questions the user got right, divides it by 7
(the total number of questions), then multiplies it by 100 to get a percentage correct and stores
it in the variable score"""
import decimal """this will import a function to round off the final percentage to a whole number
instead of an unnecessarily long decimal"""
score = decimal.Decimal(score)
"""this redefines the score variable as some sort of roundable decimal. the round() function in the line
below will still function without this line, but it would print an unneeded .0 before the %"""
print ("You got " + str(amountright) + " out of 7 right, or " + str(round(score,0)) + "%.")
"""the round() function works by rounding the first argument to n places in the second argument"""

评论是否有错误?

2 个答案:

答案 0 :(得分:1)

#用于表示comment的开头。三引号用于表示multiline strings的开头和结尾。虽然字符串不是注释,但有时候multiline strings can be used as multiline comments

但是,字符串的位置仍然必须遵守Python syntax rules

score = amountright/7*100 """this takes the amount..."""

引发SyntaxError,因为该字符串跟在一个不是字符串的表达式之后。 amountright/7*100 """this takes the amount..."""大致相当于

>>> 1 "foo"
SyntaxError: invalid syntax

Python不知道如何评估后跟字符串的数字。即使可以对其进行评估,其值也会为assigned to score。多行字符串不会被解释为注释。要使多行字符串充当注释,它必须单独放在一行:

score = amountright/7*100 
"""this takes the amount of questions the user got right, divides it by 7
(the total number of questions), then multiplies it by 100 to get a percentage correct and stores it in the variable score"""

import decimal 
"""this will import a function to round off the final percentage to a whole number
instead of an unnecessarily long decimal"""

或使用更常用的注释语法:

score = amountright/7*100 
# this takes the amount of questions the user got right, divides it by 7 (the
# total number of questions), then multiplies it by 100 to get a percentage
# correct and stores it in the variable score

#放在每一行的前面可能看起来很痛苦,但却是一篇好文章 用Python编程的编辑器应该有一种方法可以选择文本区域和 按下按钮或组合键,为您插入#标志。如果你的 编辑器没有此功能find one that does

答案 1 :(得分:1)

我遇到了类似的问题: 有时IDLE会指向错误的方向,并说“#34;语法无效"如果在错误的地方有错误的字符,例如

print(f"value of counter = {counter}")

效果很好,让我们在第50行说,但是

print(f"value of counter = {counter]}")

生成消息"语法无效"指向第1行中无关的评论

我花了一些时间才找到错字"]"在格式化的字符串中。 所以一定要检查你的牙套!