函数名不存储python中的返回值

时间:2017-02-22 22:49:53

标签: python-3.x

我在大学预科课程的第3周。我被赋予了计算BMI的任务。我可以编写产生所需输出的代码,但是说明我必须使用函数,这给了我麻烦。这是我提出的代码,我相信也许我的问题是在第12,16和20行,输入值没有存储在函数名中。还有别的东西似乎是错的,因为当我跑它时,它要求学生身高两次。如果有人能看到这个并给我一些方向,我会非常感激。

...说明书

你是当地高中橄榄球队的营养教练。你意识到有些球员在暑假回归时没有达到标准杆。实现营养是一个富有成效的团队的关键,您决定实施身体质量指数计划。 写一个模块化的身体质量指数(BMI)程序,它将计算团队成员的BMI。计算BMI的公式如下: BMI =体重* 703 /身高^ 2 注意:高度^ 2表示,高度值增加到2的幂。 您的程序应使用以下功能: 一种获得运动员重量的方法 获得玩家身高的方法 一种计算运动员BMI的方法 一种显示身高,体重和计算BMI的方法

import math
import sys
print("King's BMI Calculator")

while True:
    name = input("Please enter student's name or press 0 to quit:")
    if name == "0":
        break

    def h():
        height = int(input("Please enter student's height in inches:"))
        return height

    def w():
        weight = int(input("Please enter student's weight in pounds:"))
        return weight

    def bmi():
        total = float((str(w() * 703)/str(h() * str(h()))))
        return total

    def printbmi():
        print(name + "'s BMI Profile")
        print("Height:", str(h(), "inches"))
        print("Weight:", str(w(), "lbs"))
        print("BMI Index:" + str(float(round(bmi(), 1))))
        return

    def main():
        h()
        w()
        printbmi()

    main()

2 个答案:

答案 0 :(得分:0)

无论何时调用函数(即function_name()),都会执行该函数。因此,只要调用 w()h(),您的脚本就会要求输入。一个简单的解决方案是将返回值存储到变量,可能是weight = w()height = h(),这样您就可以在需要时使用变量,而不是每次调用整个函数。

def w():
    # ...
    return weight

def h():
    # ...
    return height

def bmi(w, h)
    # ...
    return total

def printbmi(w, h, total):
    # print(w, h, total)

def main():
    # prompt
    weight = w()
    height = h()
    total = bmi(weight, height)
    printbmi(weight, height, total)

while True:
    main()

答案 1 :(得分:0)

您可以通过考虑以下内容来更新您的代码。

  • AB11; Angela AB22; Beatrice 循环之外定义函数(AB22,Edinburgh ,6 AB11,Thunderdome,1 AB11,Station,5 )。
  • 请勿在{{1​​}}内拨打Angela Thunderdone Station Beatrice Edinburgh ArrayList<String> names = new ArrayList<String>(); TreeSet<String> destinations = new TreeSet<String>(); public TaxiReader() { BufferedReader brName = null; BufferedReader brDest = null; try { // Have the buffered readers start to read the text files brName = new BufferedReader(new FileReader("taxi_details.txt")); brDest = new BufferedReader(new FileReader("2017_journeys.txt")); String line = brName.readLine(); String lines = brDest.readLine(); while (line != null && lines != null ){ // The input lines are split on the basis of certain characters that the text files use to split up the fields within them String name [] = line.split(";"); String destination [] = lines.split(","); // Add names and destinations to the different arraylists String x = new String(name[1]); //names.add(x); String y = new String (destination[1]); destinations.add(y); // add arraylists to treemap TreeMap <String, TreeSet<String>> taxiDetails = new TreeMap <String, TreeSet<String>> (); taxiDetails.put(x, destinations); System.out.println(taxiDetails); // Reads the next line of the text files line = brName.readLine(); lines = brDest.readLine(); } // Catch blocks exist here to catch every potential error } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); // Finally block exists to close the files and handle any potential exceptions that can happen as a result } finally { try { if (brName != null) brName.close(); } catch (IOException ex) { ex.printStackTrace(); } } } public static void main (String [] args){ TaxiReader reader = new TaxiReader(); } ,因为您在h(),w(),bmi()内呼叫他们。因此,您的课程将要求每位学生两次输入。
  • 您也应该将while函数移出循环。

您的h()和bmi()函数也存在问题。您多次调用w()main()函数。

您可以按照以下方式更新代码。

printbmi()

输出:

main()