我坚持使用这一点代码。我需要在用户输入中读取费用编号,并将其与帐号编号数组进行比较。然后告诉用户该号码是否有效。我还必须使用二进制搜索算法。现在,当我运行程序时,我能够输入一个收费号码,但之后没有任何反应。不确定我错过了什么,或者我需要添加/更改什么。
谢谢!
def main():
accountNumbers = [5658845, 4520125, 7895122, 8777541, 8451277, 1302850, 8080152, 4562555, 5552012, 5050552, 7825877, 1250255, 1005231, 6545321, 3852085, 7576651, 7881200, 4581002]
accountNumbers.sort()
chargeNumber = int(input('Please enter a charge number: '))
binary_search(accountNumbers, chargeNumber)
def binary_search(accountNumbers, chargeNumber):
first = 0
last = len(accountNumbers) - 1
found = 0
while first <= last and found == 0:
placeHolder = (first + last) // 2
if accountNumbers[placeHolder] == chargeNumber:
found = 1
else:
if chargeNumber < accountNumbers[placeHolder]:
first = placeHolder + 1
else:
last = placeHolder - 1
if found == 1:
print('Charge account number', chargeNumber, 'was in the system.')
else:
print('Charge account number', chargeNumber, 'was not in the system.')
main()
答案 0 :(得分:1)
你有一个拼写错误...而不是使用=
你曾使用==
作为赋值运算符。变化
first == placeHolder + 1
要
first = placeHolder + 1
同样,在else
子句“赋值”
答案 1 :(得分:1)
除了Dinesh提到的拼写错误之外,还有一些问题。
found == 1
是另一个错字。它应该是found = 1
。
您正在查看剩余列表中错误的一半。如果chargeNumber
小于当前的数据透视值,那么您应该查看列表的第一个一半(即last = placeHolder - 1
)。切换first =
和last =
语句应该可以解决这个问题,或者将<
更改为>
。
当您在结尾检查found
时,您将打印错误的消息。同样,切换两个print
调用应该可以解决这个问题。另外,if found:
应该足够(而不是if found == 1
),因为bool(1) == True
。
另外,我建议使用python的bool
类型。如果你使用int
,那就好了,因为当需要一个非bool()
类型时会调用bool
,但它更能传达你使用found
的意图// Get values from form
$monto=$_POST['monto'];
$personas=$_POST['personas'];
$ciudad=$_POST['ciudad'];
$giro1=$_POST['giro1'];
$giro2=$_POST['giro2'];
// Insert data into mysql
$sql="INSERT INTO $tbl_name(monto, personas, ciudad, giro1, giro2)VALUES('$monto', '$personas', '$ciudad', '$giro1', '$giro2')";
$result=mysql_query($sql);
1}}作为布尔类型。