Python 如何使用我的号码查找器解决此问题?
我正在尝试做一个数字查找器来向一个朋友证明一点,你可以用7个数字找到1-100之间的任何数字,但我不能让它按我想要的方式工作。输出只是一个62个的连续列表,我看不出问题所在。有人能帮忙吗? 这是我的密码-Python 如何使用我的号码查找器解决此问题?,python,Python,我正在尝试做一个数字查找器来向一个朋友证明一点,你可以用7个数字找到1-100之间的任何数字,但我不能让它按我想要的方式工作。输出只是一个62个的连续列表,我看不出问题所在。有人能帮忙吗? 这是我的密码- numbers = list(range(0,101)) numbers_to_add_take_away = [25,13,6,3,1,1,1] target = 62 found_number = False def halfing_sequence(): x = 0
numbers = list(range(0,101))
numbers_to_add_take_away = [25,13,6,3,1,1,1]
target = 62
found_number = False
def halfing_sequence():
x = 0
mid = 50
half = int(numbers[mid])
if mid == target:
print('Match!')
found_number = True
quit()
elif target > half:
mid = int(mid + (numbers_to_add_take_away[x]))
elif target < half:
mid = int(mid - (numbers_to_add_take_away[x]))
x = x + 1
print(mid)
while found_number == False:
halfing_sequence()
编号=列表(范围(0101))
数字加起来等于[25,13,6,3,1,1,1]
目标=62
已找到\u编号=False
def半成品序列():
x=0
中=50
一半=整数(数字[中间])
如果mid==目标:
打印('Match!')
已找到\u编号=真
退出
elif目标>一半:
mid=int(mid+(数字加上带走[x]))
elif目标<一半:
mid=int(mid-(数字加上带走[x]))
x=x+1
打印(中)
当找到时\u number==False:
半分法_序列()
非常感谢您提供的帮助
x
从未更改,而且每次调用函数时,它们都会重置为0和50。一种解决方案是生成函数的x和mid参数,并使用递归再次调用函数,直到找到解决方案
numbers = list(range(0,101))
numbers_to_add_take_away = [25,13,6,3,1,1]
target = 62
found_number = False
def halfing_sequence(x, mid):
half = int(numbers[mid])
if mid == target:
print('Match!')
quit()
elif target > half:
mid = int(mid + (numbers_to_add_take_away[x]))
elif target < half:
mid = int(mid - (numbers_to_add_take_away[x]))
x = x + 1
print(x)
print(mid)
halfing_sequence(x, mid)
x=0
mid=50
halfing_sequence(x=0, mid=50)
编号=列表(范围(0101))
数字加起来等于[25,13,6,3,1,1]
目标=62
已找到\u编号=False
def对半顺序(x,mid):
一半=整数(数字[中间])
如果mid==目标:
打印('Match!')
退出
elif目标>一半:
mid=int(mid+(数字加上带走[x]))
elif目标<一半:
mid=int(mid-(数字加上带走[x]))
x=x+1
打印(x)
打印(中)
对半排列顺序(x,中间)
x=0
中=50
对半排列顺序(x=0,mid=50)
您需要在您的函数
对半序列
之外初始化x
和mid
,然后您可以将它们与关键字全局
一起使用:
numbers = list(range(0,101))
numbers_to_add_take_away = [25,13,6,3,1,1]
target = 62
found_number = False
x = 0
mid = 50
def halfing_sequence():
global x, mid
half = int(numbers[mid])
if mid == target:
print('Match!')
found_number = True
quit()
elif target > half:
mid = int(mid + (numbers_to_add_take_away[x]))
elif target < half:
mid = int(mid - (numbers_to_add_take_away[x]))
x = x + 1
print(mid)
while found_number == False:
halfing_sequence()
你能用一个与你的问题相关的标题来编辑你的问题吗?你应该编辑你的标题,使它与你的问题相关,向我们展示你的算法得到的输出,以及所需的输出。那么
数字添加和带走的目的是什么
?你能解释一下代码的作用吗?一下子就犯了几个错误。halfing_sequence()从不返回任何内容。发现主线程中的\u编号永远不为真。因为在函数调用中x和mid总是设置为相同的值,所以在对半序列中,您只需执行一步。@SterlingArcher感谢您通知我,我已按要求进行了更改
75
62
Match!