祝大家儿童节快乐!
今天完成一个简单的猜数字游戏
规则部分:
1、利用0~9之间的数字考虑一个4位数字。同一数字可以多次使用。
2、孩子猜想出一个4位数字告诉家长。
3、家长根据孩子给出的数字计算出Hit分数和Blow分数,并计算结果告诉孩子。
4、重复2、3操作,孩子根据每次的Hit和Blow分数,再猜想下一个4位数字,如果猜中,游戏结束。如果孩子猜想出的数字能计算出‘Hit=4’的结果,就是猜中了;2、3操作的重复次数越少越优秀。
生成随机数需要用到random模块,用‘import random’语句进行导入,利用‘random.函数名’使用各种各样的相关功能。
首先准备四个变量,然后将多次生成的随机数分别赋值给它们,并把数字连起来现实。
import random
a1 = random.randint(0, 9)
a2 = random.randint(0, 9)
a3 = random.randint(0, 9)
a4 = random.randint(0, 9)
print(str(a1) + str(a2) + str(a3) + str(a4))
注意:这里不能直接生成一个四位数,因为这个游戏是猜测的四位数中的每一位数字。
用变量的方式存储这四个数字,后续处理会有些麻烦,更好的办法是用列表进行集中保存,优化上述的代码段:
import random
a = [random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9)]
print(str(a[0]) + str(a[1]) + str(a[2]) + str(a[3]))
排除输入不正确的情况
1、检查是否为4位:
使用一个标识isok,赋初值位False进入while循环,如果不是4位数则执行print语句,继续while循环,如果是四位数,则标识符变成True不再循环。
isok = False
while isok == False:
b = input('请输入数字:')
if len(b) != 4:
print('请输入4位数字')
else:
ok = True
2、检查每位是否为数字
num是个标识。
num = True
for i in range(4):
if(b[i] < '0') or (b[i] > '9') :
print('不是数字')
num = False
break
if num :
isok = True
两段结合为:
isok = False
while isok == False:
b = input('请输入数字:')
if len(b) != 4:
print('请输入4位数字')
else:
num = True
for i in range(4):
if(b[i] < '0') or (b[i] > '9') :
print('不是数字')
num = False
break
if num :
isok = True
print(b[0])
print(b[1])
print(b[2])
print(b[3])
判断Hit,hit表示位置和数字都是一样的状态。
hit = 0
for i in range(4):
if a[i] == int(b[i]):
hit = hit + 1
判断Blow,blow表示数字一致,但存放位置不同的状态。
blow = 0
for j in range(4):
if(int(b[j]) == a[i]) and (a[i] != int(b[i])) and (a[j] != int(b[j])):
blow = blow + 1
break
print('Hit' + str(hit))
print('Blow' + str(blow))
Hit分数为4时,猜中则结束程序
if hit == 4:
print('猜中了!')
break
完整代码段:
import random
a = [random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9)]
#print(str(a[0]) + str(a[1]) + str(a[2]) + str(a[3]))
isok = False
while isok == False:
b = input('请输入数字:')
if len(b) != 4:
print('请输入4位数字')
else:
num = True
for i in range(4):
if(b[i] < '0') or (b[i] > '9') :
print('不是数字')
num = False
break
if num :
isok = True
hit = 0
for i in range(4):
if a[i] == int(b[i]):
hit = hit + 1
if hit == 4:
print('猜中了!')
break
blow = 0
for j in range(4):
if(int(b[j]) == a[i]) and (a[i] != int(b[i])) and (a[j] != int(b[j])):
blow = blow + 1
break
print('Hit' + str(hit))
print('Blow' + str(blow))
下一期出界面版猜数字游戏,敬请期待~