Понятия не имею, почему мой код не работает (код для начинающих) - PullRequest
0 голосов
/ 19 мая 2019

Я создал игру «камень, бумага, ножницы» с использованием Python, в которой пользователь может ввести свой выбор, а затем компьютер сам выберет опцию. Всякий раз, когда пользователь вводит свою запись, мой код выдает ошибку Traceback, которую я включил в код.

ПРИМЕЧАНИЕ: Мой код работает и прекрасно работает в Python IDLE, но у меня эта проблема только в VS Code, и я пытаюсь выяснить, почему.

Я уже пытался настроить JSON-файл, и копия этого кода также присутствует.

#rock, paper, scissors

from random import randint #to import random numbers



user = input('rock (r), paper (p), scissors (s)?') #Let's the user input something and assigns
    #it to whatever option it picked. So the next line, user will show as r, p, or s. 

print(user, 'against') #Just prints out the user input and the string against.

random = randint (1,3) #Sets the range of the random integer to all numbers between
    #1 and 3, which also includes 1 and 3.

if random == 1:
    computerChoice = 'rock' #Assigning the random integers to a specific string.

elif random == 2:
    computerChoice = 'paper' 

else:
    computerChoice = 'scissors'

#     """COMMENT: The reason why else doesn't have a option like else random == 3:
#         is because else is used when it has to evaluate EVERYTHING else that is left, if you want
#         to make this    user = input('rock (r), paper (p), scissors (s)?') #Let's the user input something and assigns
#         it to whatever option it picked. So the next line, user will show as r, p, or s.""" 



# """COMMENT: The reason why else doesn't have a option like else random == 3:
#         is because else is used when it has to evaluate EVERYTHING else that is left, if you want
#         to make this more restrictive, then just use another elif statement."""

print(computerChoice)

if user == computerChoice: #So it can output if something is a draw. 
    print('Draw!')

elif user == 'rock' and computerChoice == 'scissors': #The colon at the end is important because
    print('You won!')

elif user == 'rock' and computerChoice == 'paper':
    print('You lost!')

elif user == 'paper' and computerChoice == 'rock':
    print('You won!')

elif user == 'paper' and computerChoice == 'scissors':
    print('You lost!')

elif user == 'scissors' and computerChoice == 'paper':
    print('You won!')

elif user == 'scissors' and computerChoice == 'rock':
    print('You lost!')

    # """COMMENT: The code above consists of If and else statements that makes sure to include all
    # possible outcomes of this game, Since there are not that many outcomes, this works but
    # eventually there should be an easier way of doing this because you cannot just keep writing
    # IF and ELIF statements for several hundred outcomes.
    # The colon at the end of the statements is important because you are executing something.
    # """

Конфигурация файла JSON:

//{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387


    {
        "version": "3.5",
        "configurations": [
            {
                "type": "python",
                "request": "launch",
                "name": "Python: Current File",
                "program": "${file}",
                "console": "internalConsole"
            }
        ]
    }

ОШИБКА ВЫХОДА:

камень (r), бумага (p), ножницы (и)? камень нет в наличии

Traceback (most recent call last):

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 284, in _on_run
    self.process_net_command_json(self.global_debugger_holder.global_dbg, json_contents)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_process_net_command_json.py", line 157, in process_net_command_json
    cmd = on_request(py_db, request)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_process_net_command_json.py", line 559, in on_evaluate_request
    py_db, request, thread_id)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_api.py", line 385, in request_exec_or_evaluate_json
    thread_id, internal_evaluate_expression_json, request, thread_id)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\pydevd.py", line 873, in post_method_as_internal_command
    self.post_internal_command(internal_cmd, thread_id)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\pydevd.py", line 877, in post_internal_command
    queue = self.get_internal_queue(thread_id)

  File "c:\Users\yoush\.vscode\extensions\ms-python.python-2019.4.12954\pythonFiles\lib\python\ptvsd\_vendored\pydevd\pydevd.py", line 864, in get_internal_queue
    if thread_id.startswith('__frame__'):

AttributeError: 'NoneType' object has no attribute 'startswith'

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Я не знаком с IDE, которые вы используете, но я подозреваю, что разница в том, что один из них интерпретирует ваш код с python 3, а другой интерпретирует его с python 2.7. Существует большая разница в том, как работает ввод между этими двумя ревизиями:

  • В python3 функция input () возвращает строку (такое поведение вы хотите в этом случае)

  • В python 2.7 функция input () оценивает то, что пользователь вводит как команду python (что очень редко нужно, а в этом случае определенно не то, что вы хотите). Если вы хотите получить строку от пользователя в python 2.7, используйте вместо этого функцию raw_input ().

0 голосов
/ 19 мая 2019

Используйте else во второй последней строке вместо elif. У меня это сработало.

elif user == 'paper' and computerChoice == 'scissors':
    print('You lost!')

elif user == 'scissors' and computerChoice == 'paper':
    print('You won!')

else:
    print('You lost!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...