2017-09-22 97 views
-1

我的目标是创建一个小程序来检查客户是否被批准用于银行贷款。它要求客户每年赚取> 3万美元,并且在他/她目前的工作上拥有至少2年的经验。这些值是通过用户输入获取的。我实现了正则表达式来验证输入是没有任何符号或负数的数字,也不是0.无法将函数返回的值传递给python中的另一个函数

但是第三个函数asses_customer总是执行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() 
+1

只是供参考,[当你在你的问题中提供诸如“HELP”或“URGENT”之类的东西时,人们不喜欢](https://meta.stackoverflow.com/a/326590/7662085)。 – stybl

+0

下次会记住,谢谢 – Sosomqk

+0

你只能用'asses_customer(salary = 0,years_on_job = 0)'调用'asses_customer';你期望的参数是什么? (另外,动词“评估”最后用两个S拼写;一个S给你一串驴子。) – jwodder

回答

0

在这个片段传递第三个功能始终salary = 0years_on_job = 0

试试这个方法:

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

是啊,试了一下,但是当我到达的功能我得到这个错误: 回溯(最后最近一次调用): 文件 “C”,管76,在 的main() 文件“C:assess_customer(工资, years_on_job) NameError:没有定义全球名称'salary' – Sosomqk

1

您已经声明:

It requires the customer to earn > 30k per year and to have at least 2 years of experience on his/her current job.

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

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

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() 
+0

THanks mate,感谢您的帮助! – Sosomqk

1

你在代码中有一些错误,我已经重构它来使用你似乎想暗示的类结构。

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() 

一些固定的错误包括您最初分别致电assess_customer(你被分配0以在函数调用这两个值)的方式,以及评估的拼写:P。您在assessment_customer中的条件也应该是an,而不是or或(您希望这两个条件对于他们是合格的,而不是两个条件都是真实的)。

你其实并不甚至真正需要做的:

self.salary = self.salary_check() 
self.years_on_job = self.work_exp_check() 

线。您可以直接在函数中分配类变量(即不要返回,只需在salary_check中设置self.salary = blah)。虽然这是一种个人选择。我认为这很清楚。

希望这一切都清楚给你。如果您有任何问题,请告诉我。只需输入python NAME_OF_YOUR_FILE.py即可调用代码。

编辑:我不知道如何打破工资和年检,新代码应该修复它们。

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

+0

非常感谢您的帮助!我会在明天详细检查它(这是早上3点12分在这里,我要去在笔记本电脑上睡着了WiIll明天更新 – Sosomqk

+0

是啊,不用担心,我只是更新它来正确执行工资和years_on_the_job的检查,我没有意识到他们并没有早先拒绝这些坏的病例 – Saedeas

+0

谢谢很多@Saedeas,评论现在编辑你的修改似乎好多了。我只面临以下问题 - 现在'assess_customer'函数总是打印第一条语句,不管输入如何。我不能对它进行调试(任何想法,为什么我不能断点调试 也是最后行: “如果__name__ ==‘__main__’: LQ = loan_qualifier() lq.assess_customer()” 我相信这是调用一个主函数或者是什么?它在哪里?我很好奇,谢谢:) – Sosomqk

相关问题