猜数字游戏有感(算法启蒙)

python新手学习食用;

猜数字游戏规则:

随机产生一个1-100之间的整数,然后让用户猜这个数字,并读取用户的输入。如果用户输入的不是1~100之间的整数或者输入的带有字母,则提示用户输入不合法,当用户没有猜对的时候,提示用户的输入太大或太小,并再次读取用户的输入,当用户猜对的时候,输出用户猜测的次数

第一次思路:

先判断这个输入的东西是不是带有字母,如果带有提示用户重新输入,如果没有就进行下一步判断,用户和随机产生的数字之间的大小关系。因为需要用户不断猜测,所以第一个和第二个都是需要循环的。故第一次代码如下:

import random
num = random.randint(1, 100)
#print(num)
uinput = input("系统已经生成了一个1—100的数字,请输入一个数字开始您的猜测:")
count = 1
while not uinput.isdecimal():
    uinput = input("您输入的不是一个数字请重新输入:")
    count += 1
else:
    while  int(uinput) != num:
        if int(uinput) > 100:
            uinput = input("您输入数字超过范围,请重新输入:")
        elif int(uinput) > num:
            uinput = input("您输入数字太大了,请重新输入:")
        elif int(uinput) < num:
            uinput = input("您输入数字太小了,请重新输入:")
        count += 1
    else:
        print("恭喜你猜对了,答案就是", num, "您总共猜了", count, "次")

逻辑bug:就是只要你进入第一个循环中else之后,你就再也不会进入第一个循环了,因为while.....else是while中的条件不符合时才进入的else的,也就是说一旦你进入了else,就不会再进入它的while了。所以只要你进入了第一个else后,用户输入的带有字母之后,就会报字符s不能用Int()强制转换的错误。至于怎么改,由于这个逻辑限制,如果你再在while前面加判断就会出现很多重复代码的地方。如果有大佬能帮改一下就十分感谢了。

第二次思路:

因为要不断猜测,用户猜测成功的时候游戏结束(循环结束),直接一个无限循环加上,猜测成功就break;后面就直接if,elif,elif判断即可。(先判断的一定是是否是字符判断,因为如果你把Int()强制转换放前面if第二次进入循环的时候先会进行强制转换,也会出现跟上个思路一样的错误)

import random
num = random.randint(1, 100)
print(num)#测试
count = 0
uinput = input("系统已经生成了一个1—100的数字,请输入一个数字开始您的猜测:")
while 1:
    count += 1
    if uinput.isdecimal() == False:
        uinput = input("您输入的不是一个数字请重新输入:")
    elif int(uinput) > 100:
        uinput = input("您输入数字超过范围,请重新输入:")
    elif int(uinput) > num:
        uinput = input("您输入数字太大了,请重新输入:")
    elif int(uinput) < num:
        uinput = input("您输入数字太小了,请重新输入:")
    elif int(uinput) == num:
        print("恭喜你猜对了,答案就是", num, "您总共猜了", count, "次")
        break

这样就不会出现错误了。

PS:第一次学习Python啊哈哈,写的不好大家多有担待,欢迎大家一起交流

另外的循环使用提醒:你的循环条件要有能继续循环的语句,就比如此题中的判断完后继续input获取输入继续判断,你不加的话就无限循环了。还有计数,就是循环一次(你输入一次)计数加一,最好是放在最外面,你也能在if后面加,这样每个if后面都有了,还是有点复杂的吧。。。

逻辑思考:代码写完调试后若输入条件有区别,要关注输入顺序(最好的是你根据你的逻辑在写代码的时候就进行思考),就一定要把自己逻辑点抓好

猜你喜欢

转载自blog.csdn.net/binbin_09_10/article/details/83269309
今日推荐