我正在解决此问题(https://open.kattis.com/problems/whowantstoliveforever)。而且由于_list[index-1] == "0"
和_list[index+1] == "0"
,列表索引超出范围,显然它不存在。我想知道是否有更好的方法来解决这个问题。
下面是我的代码。
import sys
def liveForever(input_list):
if len(set(input_list)) < 1:
return True
else:
return False
return False
def print_result(boolean):
print("LIVE" if boolean else "DIES")
num_cases = int(sys.stdin.readline().strip())
for i in range(num_cases):
_list = []
case = sys.stdin.readline().strip()
for char in case:
_list.append(char)
for index in range(len(_list)):
if (_list[index-1] == "0" and _list[index+1] == "0") or (_list[index-1] == "1" and _list[index+1] == "1"):
_list[index] == "0"
elif(_list[index-1] == "0" and _list[index+1] == "1") or (_list[index-1] == "1" and _list[index+1] == "0"):
_list[index] == "1"
print(_list)
print_result(liveForever(_list))
基本上,根据列表,我的输出必须是LIVES或DIES。
答案 0 :(得分:0)
为了解释一个老医生的笑话,如果某些原因导致程序崩溃,then don't do that.
The assignment明确指定有效范围之外的任何位的值都假定为零。因此,在访问列表之前,只需检查索引是否超出范围并返回零即可。一种方法是使用包装器函数,例如:
def get_bit(bits, i):
if 0 <= i < len(bits):
return bits[i]
else:
return 0
还有其他可能更有效的方法来获得相同的结果,但我将保留本应进行的代码优化工作。
Ps。请注意,您的代码还(至少)有一个其他错误:在迭代时,您正在修改位列表。由于下一步骤的位状态应取决于上一步中的这些位及其邻居的状态,因此在更新它们之前,将给出错误的结果。要使其正常工作,您需要有两个列表,以便您可以在一个中存储更新的值,而从另一个中读取旧的值。