Во-первых, я новичок в 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), но не знаю, куда его поместить, и оно продолжает возвращать ошибку.
Буду благодарен за любые предложения...
Этот вопрос похож на: Преобразование целого числа в строку в Python. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
Есть несколько проблем. Вы пытаетесь передать значение give_travel, но эта функция не принимает никаких параметров — она считывает значения напрямую. Было бы ЛУЧШЕ, чтобы он просто выполнял вычисления, а не запрашивал ввод.
Кроме того, откажитесь от привычки спрашивать: «Это правильно?» и «ты уверен?» Это только раздражает пользователей. У них есть возможность исправлять свои ошибки при наборе текста. Кроме того, использование рекурсии (вызов give_travel изнутри give_travel) — ужасный способ создания циклов.
Этот вопрос похож на: Как мне преобразовать строку в число с плавающей запятой или целое число?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.






Чтобы преобразовать пользовательский ввод в целое число, вы можете просто привести его следующим образом:
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 и прочтите документацию )
На самом деле в вашем коде есть некоторые ошибки кодирования. Во-первых, вы вызываете функцию 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, если хотите целочисленные значения расстояния
give_travelне имеет параметров, но при вызове вы передаете ему аргумент.