在函数中传递变量并打印它们

时间:2017-04-28 10:10:58

标签: python function if-statement

我的代码存在问题。

def function_test(valid_employee,employee_number):
    print """ valid_employee : %d \n employee_number: %d"""  
        %(valid_employee, employee_number)

    if employee_number == valid_employee:   # my if statement seems to be wrong:
        print " EMPLOYEE NUMBER RECOGNISED, WELCOME %d " %(employee_number)
    else:
        print "EMPLOYEE NOT RECOGNISED"

print "Please enter your employee_number "
employee_number = int (raw_input())
test_function = function_test(030532,employee_number)

我正在尝试传递030532(valid_employee),但每次打印时,在函数(function_test)中,当值为'030532'时,我得到值'12634'。我正在使用if语句来检查函数中的employee_number和valid_employee,以确认该员工是否有效..即valid_employee(应为030532)与employee_number相同。我认为传递变量似乎存在问题

employee_number似乎打印正常,我得到我想要的值030532或者我应该说'30532'。我将'030532'作为第一个参数传递给test_function,但是当我打印valid_employee并且持续获得12634时它似乎没有传递给函数?

2 个答案:

答案 0 :(得分:1)

在Python 2.x中,以0开头的数字(如030532)被解释为八进制,而python本身会尝试将其转换为十进制,因此在这种情况下,它会转换为13578。

>>> t = 032412
  File "<stdin>", line 1
    t = 032412
             ^
SyntaxError: invalid token

在Python 3.xx

{{1}}

答案 1 :(得分:1)

您的问题是由Python 2中奇怪的设计选择与程序中奇怪的设计选择之间的交互引起的。 Python 2设计选择(在Python 3中修复)是带有前导0的int文字被解释为 octal ,而不是十进制。所以我们有:

>>> 030532
12634
>>> 010
8

这来自C,它显然曾经有意义; Python开发人员意识到这是非常令人惊讶的,因此在Python 3中进行了更改 - 现在领先的0是语法错误。

程序中的奇怪设计是你在这里使用整数。尽管称为“数字”,但员工编号实际上更好地被视为字符串。如果你在整个程序中使用字符串,你会发现它会像你期望的那样神奇地工作。这类似于电话号码,信用卡号码以及您可能遇到的其他事项。 “规则”是:

  

数字是有意义的,可以进行数学运算。

所以,我的年龄加上你的年龄给出了我们的总年龄,并且给我们的平均年龄减半。年龄是一个数字。我的员工编号或电话号码加上您的员工编号或电话号码给了我们......好吧,胡说八道。如果这种计算是没人想做的事情,请使用字符串。