我正在尝试创建一个游戏,用户想象一个1到20之间的数字,然后计算机尝试猜测它。以此目的:1.我创建了一个包含1到20的所有数字的列表。2.程序从列表中选择一个随机数,并询问虚数是否小于或大于该随机数。3.用户回答“ j”或“ n”4.每次猜测后,从冗余号码中切出列表5.最终,列表中应该只有一个数字,并且计算机应该得出正确的数字。代码:
import random
d = list(range(1,21))
tries = []
while True:
if len(d) > 1:
x = random.choice(d)
tries.append(1)
print(f"Is your number bigger than {x}?")
answer = input()
if answer == 'j':
del d[:x]
print(d)
if answer == 'n':
del d[x:]
print(d)
tries.append(1)
x = random.choice(d)
print(f"Is your number smaller than {x}?")
answer = input()
if answer == 'j':
del d[x-1:]
print(d)
if answer == 'n':
del d[:x-1]
print(d)
else:
print(f"Your number is {d[0]}. You guessed with {len(tries)} attempts.")
break
但是,奇怪的是切片无法正常工作,我多次遇到这样的结果:Output
您可以看到,在我确认我的电话号码小于9后,它不会从9-13删除电话号码
列表的索引随着列表的缩小而变化;您可以使用i = d.index(x)
查找索引:
import random
d = list(range(1,21))
tries = []
while True:
if len(d) > 1:
x = random.choice(d)
tries.append(1)
print(f"Is your number bigger than {x}?")
answer = input()
i = d.index(x)
if answer == 'j':
del d[:i+1]
if answer == 'n':
del d[i+1:]
print(d)
tries.append(1)
x = random.choice(d)
print(f"Is your number smaller than {x}?")
answer = input()
i = d.index(x)
if answer == 'j':
del d[i:]
if answer == 'n':
del d[:i]
print(d)
else:
print(f"Your number is {d[0]}. You guessed with {len(tries)} attempts.")
break
您不使用索引切片,而是使用列表内容。尝试此操作找到您的索引:
del[:d.index(x)]
而且,您也不需要一会儿,并且if语句也可以带一个中断。只是像这样使用。
while len(d) > 1:
pass
# some more code
else:
print(f"Your number is {d[0]}. You guessed with {len(tries)} attempts.")
也不要使用列表并附加。 Eiter追加猜测的数字或仅使用增量计数器tries = 0/tries += 1
。
完整的代码可能如下所示。即使您只剩下选择,您的代码也需要始终两次尝试。比您应该限制现在可以提供价值答案的问题。x = random.choice(d[:-1])
和x = random.choice(d[1:])
import random
if __name__ == '__main__':
d = list(range(1, 21))
tries = 0
while len(d) > 1:
if random.choice([True, False]):
x = random.choice(d[:-1])
tries += 1
print(f"Is your number bigger than {x}?")
answer = input("Type: j/n\n")
while answer != "j" and answer != "n":
answer = input("Type: j/n\n")
if answer == 'j':
del d[:d.index(x) + 1]
print(d)
else:
del d[d.index(x) + 1:]
print(d)
else:
tries += 1
x = random.choice(d[1:])
print(f"Is your number smaller than {x}?")
answer = input("Type: j/n\n")
while answer != "j" and answer != "n":
answer = input("Type: j/n\n")
if answer == 'j':
del d[d.index(x):]
print(d)
else:
del d[:d.index(x)]
print(d)
else:
print(f"Your number is {d[0]}. You guessed with {tries} attempts.")