2015-10-22 2 views
3

Использование IDLE Python 3.4.3. Это скрипт, который дает пользователю небольшую викторину, а затем вычисляет, сколько из них получилось. У меня есть недопустимая синтаксическая ошибка в комментарии перед запуском моего скрипта. Вот весь код вокруг комментария. Специфический комментарий под линией score = decimal.Decimal(score):Недопустимый синтаксис python в комментарии

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 красный. используя «не имеет никакого значения в этом. Тем не менее, когда я запускаю код вроде этого:

""" 
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 красный. магнезии добавил по просьбе 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""" 

Есть ли ошибка с комментарием?

+1

Я не могу воспроизвести это. –

+0

В файле может быть скрытый (непечатный?) Символ. Это может помочь сохранить сценарий в файле, скажем, 'script.py', затем откройте файл:' f = open ('script.py', 'rb') 'и посмотрите на * repr * содержимого: 'печать (магнезии (f.read()))'. Возможно, мы сможем помочь вам, если вы опубликуете 'repr'. – unutbu

+0

Вы уверены, что эта ошибка связана с комментарием? Какой у вас код? Или попробуйте удалить этот комментарий, а затем запустите свой код? –

ответ

1

# Используется для обозначения начала comment. Тройные кавычки используются для указания начала и конца multiline strings. Хотя строки не являются комментариями, иногда multiline strings can be used as multiline comments.

Однако размещение строки должно продолжаться Python syntax rules.

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

вызывает синтаксический эффект, потому что строка следует за выражением, которое не является строкой. 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.

+0

Я попытался помещать комментарий в 2 строки с помощью '#' s. все еще получая синтаксическую ошибку, но не выделенную часть, а простоя помещает курсор между i и m в слове decimal. Простаивает просто ... плохо? – dioretsa

+0

Хорошо, не спрашивайте меня, почему, но после изменения всех моих других «комментариев» к # слишком скрипт работал нормально – dioretsa

+0

@dioretsa: IDLE компилирует код Python со встроенной функцией компиляции. Функция компиляции повышает значение SyntaxErrors. редактор делает иначе, чем интерактивная консоль python, чтобы отметить местоположение, указанное в атрибутах SyntaxError, курсором (и красным выделенным) в строке вместо каретки (сдвиг 6) на строке внизу. –

0

У меня была аналогичная проблема: Иногда IDLE указывает вас в неправильном направлении и говорит «недействительный синтаксис», когда есть неправильный символ в неправильном месте, например.

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

работает хорошо, скажем, в строке 50, но

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

выдает сообщение «неверный синтаксис», указывающий на неактуальный комментарий в строке 1

мне потребовалось некоторое время, чтобы найти typo "]" в форматированной строке. Так что всегда проверяйте свои фигурные скобки!