Python: преобразование строки в целое число

Во-первых, я новичок в Python. Я пытаюсь сделать простой калькулятор расходов. У меня есть одна функция, в которой пользователь может ввести пройденное расстояние, а другая предназначена для расчета командировочных расходов путем умножения пройденного расстояния на сумму за километр.

Я знаю, что мне придется преобразовать входные данные о пройденном расстоянии в целое число, прежде чем я смогу его умножить, но, похоже, не могу получить целочисленное значение.

Вот функция расстояния перемещения:

def give_travel():
    """
    Function to prompt user to insert distance travelled in kilometers.
    While loop to ask user to confirm data given.
    """    
    print("Please enter the distance travelled for this event.")
    print("Distance should be given in kilometers")
    travel_input = input(f"The distance travelled is: (km) \n")
    
    print(f"You travelled {travel_input} kms for this event")
    correct_input = input("Is this correct? y/n \n")
    while True:
        if correct_input.lower() in ["yes", "y"]:
            print("Distance travelled confirmed.")
            break
        elif correct_input.lower() in ["no", "n"]: 
            return give_travel()  
        else:
            print("Invalid input. Please re-enter distance travelled to continue.")
            return give_travel()

Вот функция, которая должна рассчитать расходы:

def travel_expenses():
    """
    Function to calculate travel expenses based on distance travelled.
    """
    
    travel_total = give_travel(travel_distance) * 0.43
    print(travel_total)    

Я попытался определить travel_input как целое число с помощью travel_distance = int(travel_input), но не знаю, куда его поместить, и оно продолжает возвращать ошибку.

Буду благодарен за любые предложения...

give_travel не имеет параметров, но при вызове вы передаете ему аргумент.
Scott Hunter 16.07.2024 20:59

Этот вопрос похож на: Преобразование целого числа в строку в Python. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

Razzer 16.07.2024 20:59

Есть несколько проблем. Вы пытаетесь передать значение give_travel, но эта функция не принимает никаких параметров — она считывает значения напрямую. Было бы ЛУЧШЕ, чтобы он просто выполнял вычисления, а не запрашивал ввод.

Tim Roberts 16.07.2024 20:59

Кроме того, откажитесь от привычки спрашивать: «Это правильно?» и «ты уверен?» Это только раздражает пользователей. У них есть возможность исправлять свои ошибки при наборе текста. Кроме того, использование рекурсии (вызов give_travel изнутри give_travel) — ужасный способ создания циклов.

Tim Roberts 16.07.2024 21:00

Этот вопрос похож на: Как мне преобразовать строку в число с плавающей запятой или целое число?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

folen gateis 16.07.2024 21:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы преобразовать пользовательский ввод в целое число, вы можете просто привести его следующим образом:

 travel_input = int(input("The distance travelled is: (km) \n"))

Кроме того, когда вы принимаете пользовательский ввод, вы также должны его проверять. Вы можете использовать блок try-catch, чтобы убедиться, что пользователь вводит правильный тип данных:

try:
    travel_input = int(input("The distance travelled is: (km) \n"))
except ValueError:
    print("That's not an int!")

Хотя входные данные имеют целочисленный тип, использование int вполне допустимо. Если тип должен быть числом с плавающей запятой, списком или любым другим оцениваемым типом: вы можете использовать ast.literal_eval, чтобы ввести строку типа ['a', 3.1415, 42], и ast.leteral_eval преобразует ее в то, что вы ожидаете. (обязательно import ast и прочтите документацию )

VoNWooDSoN 16.07.2024 21:09
Ответ принят как подходящий

На самом деле в вашем коде есть некоторые ошибки кодирования. Во-первых, вы вызываете функцию Give_travel рекурсивно вместо того, чтобы возвращать значение расстояния после подтверждения правильности ввода или нет.

затем в вашей основной функции "travel_expenses" вы используете переменную travel_distance без предварительной ее инициализации.

вам нужно ввести расстояние в вашей основной функции, что-то вроде этого поможет,

def give_travel(travel_input):
    """
    Function to prompt user to insert distance travelled in kilometers.
    While loop to ask user to confirm data given.
    """    
    print("Please enter the distance travelled for this event.")
    print("Distance should be given in kilometers")
    
    print(f"You travelled {travel_input} kms for this event")
    correct_input = input("Is this correct? y/n \n")
    while True:
        if correct_input.lower() in ["yes", "y"]:
            print("Distance travelled confirmed.")
            break
        elif correct_input.lower() in ["no", "n"]: 
            travel_input = float(input(f"The distance travelled is: (km) \n"))
            correct_input = input("Is this correct? y/n \n")
        else:
            print("Invalid input. Please re-enter distance travelled to continue.")
            travel_input = float(input(f"The distance travelled is: (km) \n"))
            correct_input = input("Is this correct? y/n \n")
    return travel_input

def travel_expenses():
    """
    Function to calculate travel expenses based on distance travelled.
    """
    travel_input = float(input(f"The distance travelled is: (km) \n"))
    travel_total = give_travel(travel_input) * 0.43
    print(travel_total)

здесь я использую ввод как число с плавающей запятой, потому что тип ввода по умолчанию в Python — это число с плавающей запятой, вы можете использовать int, если хотите целочисленные значения расстояния

Другие вопросы по теме