Почему строка 13 a = input () влияет на переменную в строке 15 b = input (int ()? Python3 - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь написать функцию, которая принимает пользовательский ввод в виде строки и присваивает его переменной a. Затем принимает пользовательский ввод целого числа и присваивает его переменной b. Проблема в том, что когда я запускаю свой код в командной строке Windows и ввожу строку, думая, что я просто присваиваю переменную a как строку, я получаю эту ошибку, говоря, что она ищет int для переменной b.

Если я установлю переменную b равной input("Please enter starting account balance: ") вместо input(int("Please enter starting account balance: ")), ошибка исчезнет, ​​как и ожидалось, но без использования int я не знаю, как добавить оператор try и кроме.

def player_setup():
    a = input("Please enter player name: ")
    print(f"Name saved as {a}.")
    b = input(int("Please enter starting account balance: "))
    return Player(name = a, account = b)

from BlackJackPackage.game_support_functions import welcome
from BlackJackPackage.game_support_functions import player_setup


welcome()

while True:
    #Enter Player Name, and Enter Player Starting Money
    human_player = player_setup()
    print(f"Welcome {human_player.name}!")
    print(f"You have ${human_player.account} in your account!.")
    break

Я надеюсь, что переменная a будет строкой, а b - целым числом. Эти переменные должны в конечном итоге использоваться для инициализации класса с именем Player, который требует ввода name(string) и account(integer). Похоже, что строка ввода для a пытается присвоить свой ввод как a, так и b, вызывая ошибку ValueError.

Ошибка:

C:\Users\Username\Desktop\Udemy Python>python Blackjackgame.py
Welcome to Blackjack Basic. First you will need to enter your name and
how much money you have.
Please enter player name: David
Name saved as David.
Traceback (most recent call last):
  File "Blackjackgame.py", line 9, in <module>
    human_player = player_setup()
  File "C:\Users\David Fitzmaurice\Desktop\Udemy         
Python\BlackJackPackage\game_support_functions.py", line 15, in 
player_setup
    b = input(int("Please enter starting account balance: "))
ValueError: invalid literal for int() with base 10: 'Please enter starting 
account balance:

1 Ответ

2 голосов
/ 22 мая 2019

В первом случае вы поменяли местами ключевые слова int и input, поэтому вы пытаетесь преобразовать строку "Please enter starting account balance: " в целое число, что приводит к ошибке ValueError: invalid literal for int() with base 10: 'Please enter starting account balance:

Так что вместо

b = input(int("Please enter starting account balance: "))

Это будет так, как показано ниже, где вы берете ввод, а затем конвертируете его в целое число.

b = int(input("Please enter starting account balance: "))

Следовательно, обновленный код будет

def player_setup():
    a = input("Please enter player name: ")
    print(f"Name saved as {a}.")

    #Fixed this line by swapping int and input
    b = int(input("Please enter starting account balance: "))
    return Player(name = a, account = b)

from BlackJackPackage.game_support_functions import welcome
from BlackJackPackage.game_support_functions import player_setup


welcome()

while True:
    #Enter Player Name, and Enter Player Starting Money
    human_player = player_setup()
    print(f"Welcome {human_player.name}!")
    print(f"You have ${human_player.account} in your account!.")
    break
...