我的代码存在问题。
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时它似乎没有传递给函数?
答案 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是语法错误。
程序中的奇怪设计是你在这里使用整数。尽管称为“数字”,但员工编号实际上更好地被视为字符串。如果你在整个程序中使用字符串,你会发现它会像你期望的那样神奇地工作。这类似于电话号码,信用卡号码以及您可能遇到的其他事项。 “规则”是:
数字是有意义的,可以进行数学运算。
所以,我的年龄加上你的年龄给出了我们的总年龄,并且给我们的平均年龄减半。年龄是一个数字。我的员工编号或电话号码加上您的员工编号或电话号码给了我们......好吧,胡说八道。如果这种计算是没人想做的事情,请使用字符串。