前几天我发了一篇文章,是关于如何用Python如何实现三的小游戏的。但这个代码也是瑕疵的,如果说你填人数的时候填一个不是数字的字符串,那程序就会直接报错并停止。怎么改进呢?
.isdigit()
使用变量名(变量存储字符串).isdigit()可以判断此变量所指向的字符串是否为数。举个例子吧:
a = '3'
print(a.isdigit())
b = 'ytt'
print(b.isdigit())
运行结果:
True False
注意:判断的必须为字符串而不是整型或浮点型!!!
改进方案
至此,我们已经知道用什么方法改进了,现在就试试吧!
def three_times(number, *, exit=True, quit=False):
member = []
for i in range(1, (number + 1)):
member.append(i)
print(('-' * 50))
print("【游戏开始】共{}名游戏成员,请从1开始报数(三的倍数请输入空格)".format(number))
print('【提示】结束比赛请输入【#】,个人退赛请输入【*】(请裁判员告诉选手允不允许结束与退赛)')
print(('-' * 50))
count = 0
cur = 0
while (len(member) != 1):
count += 1
if (cur >= len(member)):
cur = 0
exp = 0
if (count % 3 == 0):
exp = ' '
else:
exp = str(count)
input_number = input('{}号请输入:'.format(member[cur]))
if quit == True:
if (input_number == '#'):
print('比赛中途结束')
return
if exit == True:
if (input_number == '*'):
print("【退出】{}号成员退出比赛,其他人继续".format(member[cur]))
member.pop(cur)
continue
if (input_number != exp):
print("【淘汰】{}号成员淘汰".format(member[cur]))
member.pop(cur)
continue
cur += 1
print("\n【游戏结束】{}号获胜\n".format(member[0]))
f = input('人数:')
while True:
if f.isdigit():
f = int(f)
break
else:
print('输入有误,请重新输入。')
f = input('人数:')
input_ex = input('允许选手中途退出吗:')
while (input_ex != '允许' or input_ex != '不允许'):
if input_ex == '允许':
ex=True
break
elif input_ex == '不允许':
ex=False
break
else:
input_ex = input('允许选手中途退出吗:')
input_qu=input('允许中途结束吗:')
while (input_qu != '允许' or input_qu != '不允许'):
if input_qu == '允许':
qu=True
break
elif input_qu == '不允许':
qu=False
break
else:
input_qu = input('允许中途结束吗:')
three_times(f, exit=ex, quit=qu)
这里通过while True与if-break进行配合,成功地改进了我们的程序!