AttributeError: объект «NoneType» не имеет атрибута «заголовок»

Пытался запустить этот код, но ошибка говорит, что я допустил ошибку с .title . Как я могу это исправить? (Обратите внимание, что я все еще новичок в мире Python и открыт для любых предложений, которые могли бы улучшить мой код. Однако есть вероятность, что я не пойму его, если он не будет объяснен, если это что-то новое, например, вы могли бы используйте __________ вместо _________ .)

Вот мой код:

import time
import sys

print("Welcome to my quiz")
time.sleep(2)
input('Press enter to continue')

score = int(0)
failed = int(0)

def points():
    print("Correct! Well done!")
    global score
    score = score + 1

def fail():
    print("Oh no, that is incorrect")
    global failed
    failed = failed + 1

def printtotal():
    global score
    global failed
    print("You have ",score,"points, and ",failed,"/3 lives used.")

if failed == 5:
    sys.exit('Program terminated.')

print('You will have 5 seconds to answer each question \nIf you fail 5 times or more, the program will exit')
time.sleep(3)
print('Good luck!')
time.sleep(2)

q1 = print(input("What is the capital of England?")).title
if q1 == 'London':
    points()
else:
    fail()
printtotal()

q2 = print(input("Who is the prime minister's wife?")).title
if q2 == 'Samantha' or 'Samantha Cameron':
    points()
else: 
   fail()
printtotal()

print('How would you say \'I came, I saw, I conquered\' in latin?')
print('a) veni, vidi, vici')
print('b) veni, vedi, vici')
print('c) vini, vedi, vici')
q3 = print(input('Type the letter here:'))
if q3 == 'a)' or 'a':
    points()
else:
    fail()
printtotal()

Если я попытаюсь выполнить этот код, я получаю следующую ошибку:

Traceback (most recent call last):
  File "/root/Desktop/Python_Stuff/quiz.py", line 34, in <module>
    q1 = print(input("What is the capital of England?")).title
AttributeError: 'NoneType' object has no attribute 'title'

Если кто-то заметит еще ошибки, пожалуйста, сообщите мне. Как я могу исправить эту ошибку?


person python_noobie    schedule 23.03.2016    source источник
comment
Вам нужно переместить вторую закрывающую скобку в конец строки. Вы также должны делать .title(), а не .title.   -  person zondo    schedule 24.03.2016
comment
Я видел около 4 вопросов по Python с опечатками за последний час, я чувствую, что завтра в каком-то университете должно быть задание по Python.   -  person Tamas Hegedus    schedule 24.03.2016


Ответы (4)


Функция print ничего не возвращает, точнее, возвращает NoneType. Таким образом, вы не можете получить значение его члена title.

print(input("What is the capital of England?")).title

Эквивалентно:

answer = input("What is the capital of England?")
print(answer).title

Но print(answer) просто распечатает все, что ввел пользователь, и затем вернет объект None. То, что вы на самом деле хотите, это:

print(input("What is the capital of England?").title())

Подробнее о печати и заголовке см. здесь.

Это обнаружит отдельную проблему с вашим кодом: вы пытаетесь одновременно что-то ввести и напечатать вопрос, для которого вы хотите ввести данные. В этом случае это то, что вам нужно :

q1 = input("What is the capital of England?")  # This will automatically print 'What is...' when it reaches this point in the program

Приведенное выше сохранит ввод пользователя в q1.

person Nathaniel Ford    schedule 23.03.2016
comment
На самом деле он хочет сохранить ввод в переменных q1, q2 и т. д., поэтому прямая печать также неверна. - person Ilja Everilä; 24.03.2016

Сообщение об ошибке указывает, что проблема связана с этой строкой:

q1 = print(input("What is the capital of England?")).title

Здесь вы запрашиваете пользовательский ввод (с функцией input python3.x), а затем печатаете этот результат на стандартный вывод (обычно это экран или «окно терминала»). Однако print не возвращает ничего особенного, поэтому в терминологии Python возвращается None. None — это синглтон (считайте его особым типом переменной), у которого нет атрибута title, поэтому вы не можете ввести, например, None.title.

Рассмотрите просто сохранение ввода в q1, например:

q1 = input("What is the capital of England?")
person Oliver W.    schedule 23.03.2016

print() возвращает None. Следовательно, print(...).title поднимает AttributeError, которое вы видите.

person Tyler Crompton    schedule 23.03.2016

print не имеет атрибута title. То есть нельзя:

print().title

На самом деле я думаю, что вы хотите полностью избавиться от print(), вот так:

q1 = input("What is the capital of England?")
if q1 == 'London':
person Zederick    schedule 23.03.2016