P7讲 关于优化猜数字游戏,需要帮助
我想自己增加一个功能,“不仅提示大小,还提示剩余猜测的次数”,想实现的功能是,如果输入的数字小于8.就提示,‘’小了,你还有2次机会'
又因为手误输成了一个小于8的数。系统继续提示,并且反馈剩余次数。
写出了如下的代码,但是,实现不了这个功能。我知道自己错在哪里但是不知道应该怎么套用循环。
“如果我的第二次再输入一个小于8的数,我仍然能得到“'小了,你还有2次机会”,但是很明显,这应该是第二次了”,所以,我想着 如果,这个时候的循环C 是等于2的,那么就应该输出,'都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!'),但是为什么没有实现呢?
c = 3
while c > 0:
i = input('请输入一个0到10的数字:')
a = int(i)
if a == 8:
print('猜的真准')
break
else:
if a < 8:
print('小了,你还有2次机会')
c = c -1
if c == 2:
print('都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!')
if c == 1:
print('又输错了,抱歉你的机会已用完!')
else:
if a > 8:
print('大了,你还有2次机会')
if c == 2:
print('都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!')
if c == 1:
print('又输错了,抱歉你的机会已用完')
c = c - 1
print('游戏结束') 我需要在print 那里 把“当前状态下的C的数值,” 也放入print内么, 比如 第一次输入小了,C就=2了,print"都已经说小了呀,你是因为手误输错的吗?那再给你 'c' 次机会吧!" 是这个逻辑?这样的语句没有问题吗? 本帖最后由 Hoiste 于 2020-5-4 17:27 编辑
你需要另一个变量来存储上一次的输入才能进行所需要的对比,代码我稍微改了,加了点注释,应该没有超纲的。
c = 3
j = ''# 用于存储上一次的输入值,为防止每一次都被初始化为空,放在循环外面
while c > 0:
i = input('请输入一个0到10的数字:')
a = int(i)
if a == 8:
print('猜的真准')
break
else:
c -= 1
if a < 8:
print('小了,',end = '')
if j:#第一次输入的时候j是空字符,所以j会判定为False,完成第一次输入后j拥有了上一次的输入值,则开始按要求判断
if a < j and j < 8:# 为什么要加and后面的语句?试试看删掉and j < 8和下面and j > 8后分别输入11,12,5的情况就动了。
print('都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!')
c += 1
if a > 8:
print('大了,',end = '')
if j:
if a > j and j > 8:
print('都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!')
c += 1
if c == 0:
print('机会用完了')
break
print('你还有',c,'次机会')
j = a
print('游戏结束')
Hoiste 发表于 2020-5-4 17:18
你需要另一个变量来存储上一次的输入才能进行所需要的对比,代码我稍微改了,加了点注释,应该没有超纲的。 ...
你好,很感谢你的帮助,
我试运行了一下。发现有bug,第2次提示错误了、应该是还剩一次。
然后我输入大于8的数字。居然也可以输入3次、、、尴尬。如下是我的运行结果。
请输入一个0到10的数字:3
小了,你还有 2 次机会
请输入一个0到10的数字:2
小了,都已经说小了呀,你是因为手误输错的吗?那再给你一次机会吧!
你还有 2 次机会
请输入一个0到10的数字:9
大了,你还有 1 次机会
请输入一个0到10的数字:10
大了,都已经说大了呀,你是因为手误输错的吗?那再给你一次机会吧!
你还有 1 次机会
请输入一个0到10的数字:10
大了,机会用完了
游戏结束
存在这样2个bug
1输入 一个小于8 的数时, 例如7我可以从7输入到0 8次机会 并且没有输出提示“
2输入 7 6 9 10可以有4次机会
7 910 8 同理也是4次。
我的期望是 总共只有三次机会。
————————————————————————————————————————————————
非常感谢你的帮助,,对于我的猜想,给于了肯定,
居然真的可以 print('你还有',c,'次机会') 学到了新的知识。(我是真的零基础,,就是喜欢举一反三,考一下自己,验证自己的想法。当然了这样很纠结。)给你添麻烦了。
haogetsh 发表于 2020-5-4 17:59
你好,很感谢你的帮助,
我试运行了一下。发现有bug,第2次提示错误了、应该是还剩一次。
然后我输入大 ...
第一个也不能说是bug,应该说我理解为再给一次机会就是在我误输的时候不扣除机会,也就是保持当前机会次数的。如果这个不符合你的想法的话只要把两个c += 1去掉就可以了。
另外一个问题是代码仓促写的所以必然还有瑕疵,你可以试着完善一下。
页:
[1]