在python中,无法将返回值从函数传递给另一个函数

在python中,无法将返回值从函数传递给另一个函数,python,python-2.7,Python,Python 2.7,我的目标是建立一个小程序,检查客户是否获得银行贷款批准。它要求客户每年收入超过3万英镑,并且在当前工作中至少有2年的经验。这些值是通过用户输入获得的。我实现了regexs,以验证输入是否仅为数字,没有任何strigns或negatives,也没有0 但是第三个函数总是执行else部分。我认为每次参数要么是无,要么是0 以下是源代码: import sys import re import logging import self as self class loan_qualifier():

我的目标是建立一个小程序,检查客户是否获得银行贷款批准。它要求客户每年收入超过3万英镑,并且在当前工作中至少有2年的经验。这些值是通过用户输入获得的。我实现了regexs,以验证输入是否仅为数字,没有任何strigns或negatives,也没有0

但是第三个函数总是执行else部分。我认为每次参数要么是无,要么是0

以下是源代码:

import sys
import re
import logging
import self as self


class loan_qualifier():

    # This program determines whether a bank customer
    # qualifies for a loan.

    def __init__(self): #creates object
        pass

def main():

        salary_check()
        work_exp_check()
        asses_customer(salary = 0, years_on_job = 0)


def salary_check():

        input_counter = 0  # local variable

        # Get the customer's annual salary.
        salary = raw_input('Enter your annual salary: ')
        salary = re.match(r"(?<![-.])\b[1-9][0-9]*\b", salary)

        while not salary:

            salary = raw_input('Wrong value. Enter again: ')
            salary = re.match(r"(?<![-.])\b[1-9][0-9]*\b", salary)

            input_counter += 1

            if input_counter >= 6:
                print ("No more tries! No loan!")
                sys.exit(0)
            else:
                return salary


def work_exp_check():

        input_counter = 0 #local variable to this function

        # Get the number of years on the current job.
        years_on_job = raw_input('Enter the number of ' +
                                 'years on your current job: ')
        years_on_job = re.match(r"(?<![-.])\b[1-9][0-9]*\b", years_on_job)

        while not years_on_job:

            years_on_job = raw_input('Wrong work experience. Enter again: ')
            years_on_job = re.match(r"(?<![-.])\b[1-9][0-9]*\b", years_on_job)

            input_counter += 1

            if input_counter >= 6:
                print ("No more tries! No loan!")
                sys.exit(0)
            else:
                return years_on_job

def asses_customer(salary, years_on_job):

        # Determine whether the customer qualifies.
        if salary >= 30000.0 or years_on_job >= 2:

            print 'You qualify for the loan. '
        else:
            print 'You do not qualify for this loan. '

# Call main()
main()
导入系统 进口稀土 导入日志记录 将自我导入为自我 类别贷款限定符(): #此程序确定银行客户是否 #有资格获得贷款。 定义初始化(self):#创建对象 通过 def main(): 工资支票 工作经验检查() 评估客户(工资=0,工作年限=0) def salary_check(): 输入_计数器=0#局部变量 #获得客户的年薪。 工资=原始输入('输入您的年薪:')
工资=重新匹配(r)(?在这个片段中,您总是通过第三个函数
salary=0
years\u on\u job=0

试着这样做:

salary = salary_check()
years_on_job = work_exp_check()
asses_customer(salary, years_on_job)
你已声明:

它要求客户每年收入超过3万英镑,并且在当前工作中至少有2年的经验

我们可以写一些简单的语句来请求一个数字,如果没有给出一个数字,那么再次请求该数字

下面的代码是实现该目标的一种非常简单的方法

class Loan_Checker():
    def __init__(self):
        self.salary = 0
        self.years_on_job = 0

        self.request_salary()
        self.request_years()
        self.check_if_qualified()

    def request_salary(self):
        x = raw_input('Enter your annual salary: ')
        try:
            self.salary = int(x)
        except:
            print("Please enter a valid number")
            self.request_salary()

    def request_years(self):
        x = raw_input('Enter the number of years on your current job: ')
        try:
            self.years_on_job = int(x)
        except:
            print("Please enter a valid number")
            self.request_years()

    def check_if_qualified(self):
        if self.salary >= 30000 and self.years_on_job >= 2:
            print 'You qualify for the loan. '
        else:
            print 'You do not qualify for this loan. '

Loan_Checker()

您的代码中有一些错误,我已经对其进行了重构,以使用您似乎想要暗示的类结构

import sys
import re
import logging

class loan_qualifier():

    # This program determines whether a bank customer
    # qualifies for a loan.

    def __init__(self): #creates object
        self.salary = self.salary_check()
        self.years_on_job = self.work_exp_check()


    def salary_check(self):

        input_counter = 0  # local variable

        # Get the customer's annual salary.
        salary = None

        while salary is None:
            if input_counter >= 6:
                print ("No more tries! No loan!")
                sys.exit(0)
            elif input_counter >= 1:
                print ("Invalid salary.")

            salary = raw_input('Enter your salary: ')
            salary = re.match(r"(?<![-.])\b[1-9][0-9]*\b", salary).group(0)
            input_counter += 1

        # broke out of loop, so valid salary
        return salary




    def work_exp_check(self):

        input_counter = 0 #local variable to this function

        # Get the number of years on the current job.
        years_on_job = None

        while years_on_job is None:
            if input_counter >= 6:
                print ("No more tries! No loan!")
                sys.exit(0)
            elif input_counter >= 1:
                print ("Invalid year amount")

            years_on_job = raw_input('Enter the number of years at your current job: ')
            years_on_job = re.match(r"(?<![-.])\b[1-9][0-9]*\b", years_on_job).group(0)

            input_counter += 1

        # broke out of loop, so valid years_on_job
        return years_on_job



    def assess_customer(self):

        # Determine whether the customer qualifies.
        if int(self.salary) >= 30000.0 and int(self.years_on_job) >= 2:
            print 'You qualify for the loan. '
        else:
            print 'You do not qualify for this loan. '

if __name__ == "__main__":
    lq = loan_qualifier()
    lq.assess_customer()
行。您可以直接在函数中分配类变量(即,不返回,只需在salary_check中设置self.salary=blah)。这是一种个人选择。我认为这说明了这一点

希望您能明白这一点。如果您有任何问题,请告诉我。只需键入python NAME\u OF_YOUR\u FILE.py即可调用代码

编辑:我没有意识到工资和年薪支票有多糟糕,新的代码应该会修复它们


编辑:修复了此版本中的正则表达式结果。我的不好。

仅供参考。下次将记住这一点,谢谢你只会用
assess\u客户打电话给
assess\u客户(工资=0,工作年限=0)
;你希望参数是什么?(还有动词“assessment”)“结尾用两个S拼写;一个S给你一束驴子。)你能帮我用正确的方法吗?我没说它会改变任何东西。出于一些原因,你应该始终确保有准确的缩进。与你的问题中所看到的相比,你的代码的实际格式可能会让人困惑,它也可能会导致代码执行问题。是的,我尝试过,但当我到达函数:Traceback(最近一次调用last):文件“C”,第76行,在main()文件“C:评估客户(工资,工作年限)名称错误:未定义全局名称“工资”,谢谢你的帮助!非常感谢你抽出时间,我明天会详细查看它(现在是凌晨3点12分,我要在笔记本电脑上睡着了。明天我会更新你的。是的,不用担心。我只是更新了它,正确地检查了工资和工作年限。我不知道他们之前没有拒绝坏案例。非常感谢@Saedeas,现在回顾了你的更改,看起来好多了。我只是y面临以下问题-现在“assessment_customer”函数总是打印第一条语句,不管输入是什么。我无法调试它(知道为什么我不能使用断点进行调试吗?还有最后一行:'if name==“main”:lq=loan_qualifier()lq.assessment_customer()'我相信这是在调用一个主函数或其他东西?它在哪里?我很好奇,谢谢:)更新:我用pdb调试过,set_trace(),但我不明白为什么它总是执行第一个print语句(if子句总是true)。这里出了问题。我的错,我没有看到这个注释。我忘了我在.group(0)中添加了内容这将从正则表达式中获取实际的字符串结果。然后在检查中将其转换为int。代码现在可以工作了。
self.salary = self.salary_check()
self.years_on_job = self.work_exp_check()