我目前正在研究BMI计算器,我需要能够使用def函数。但是我不确定如何创建一个具有用户输入的def函数(例如高度和重量),我知道我的代码完全错误但无论如何都会发布它。如果有人能给我一个这样的例子,将不胜感激。我知道我的功能也失败了使用功能的目的。
print("BMI Calculator")
name=''
while name != '0':
name=input("Enter students name or '0' to quit: ")
if name == '0':
break
weight=float(input('Enter students weight: '))
height=float(input('Enter Students height in Inches:'))
def bmi ():
bmi = weight*703 / height ^ 2
return bmi
def bmi_profile():
print('BMI Profile!')
print('Students name:', name)
print('Students weight: ', weight)
print('Students height:', height)
print('BMI Index: ', bmi)
bmi_profile()
print("Goodbye")
答案 0 :(得分:0)
有两个主要问题是你可以使这段代码更好。
在开头定义您的功能
您目前在循环中拥有函数定义(以def
开头的块)。这意味着每次通过该循环都会定义它们。相反,它们应该在主循环开始之前定义。考虑这个伪代码。
def bmi():
# BMI code goes here
def bmi_profile():
# Print functions go here
##### Main program goes below #####
您的功能需要参数
您引用的“用户输入”称为参数或参数。它们是传递给函数的信息。您的函数需要的任何信息都应该包含在def line
的括号中,这是您的bmi函数的一个示例。
def bmi (weight, height):
bmi = weight * 703 / height ^ 2
return bmi
看看我如何在括号中包含参数重量和高度?
我希望这足以帮助你完成这个项目。如果您需要更多帮助,请报告,但我怀疑您现在就可以开始了。
答案 1 :(得分:-1)
您可以将用户输入移动到如下函数中:
def user_input():
name=input("Enter students name or '0' to quit: ")
weight=float(input('Enter students weight: '))
height=float(input('Enter Students height in Inches:'))
return (name, weight, height)
name, weight, height = user_input()
但是这样你就无法在用户输入步骤退出(实际上你可以但这会使代码变得更加复杂)。
我建议你使用pythons面向对象,因为这个例子以某种方式要求:我会创建一个包含学生名称,重量和大小的类。另外:计算平方使用**2
。
这是使用类完全重写的代码:
class BMI:
name = None
weight = None
height = None
def fill_from_input(self):
self.name=input("Enter students name: ")
self.weight=float(input('Enter students weight: '))
self.height=float(input('Enter Students height in Inches:'))
@property
def bmi(self):
return self.weight*703 / self.height**2
def __repr__(self):
return """BMI Profile!
Students name: {}
Students weight: {}
Students height: {}
BMI Index: {}""".format(self.name, self.weight, self.height, self.bmi)
while input("Ready to type in student? [Y/n]").lower() in ['y', '']:
bmi = BMI()
bmi.fill_from_input()
print(bmi) # calls __repr__
print("Goodbye")