在哪里/如何添加另一个输入验证?乘法游戏



53岁时,我决定自学一些Python来取乐。我一直在用英的YouTube视频;12个初级项目";作为一个起点和许多其他来源。

我一直在尝试写一个简单的程序来帮助我儿子学习乘法表,并取得了一定的成功。我在网上找到了一个不允许选择时间表的基本游戏。我修改了程序,允许用户选择时间表。偶尔,我儿子会用一个拼写错误破坏程序。然后,我第一次尝试输入验证。我已经到了这样一个地步:如果用户键入一个字母而不是数字,程序就会循环回来并允许另一个输入。

我想添加最后一个输入验证级别。目前,当选择时间表时,要求用户输入2&12.目前,程序接受任何数字值。我使用.idigit((来验证输入是否为数字。在验证输入是一个数字之后,我想验证数字是否在2&12.我试过用";如果";语句和while循环。我最终会出现字符串错误或";int";错误。

请有人看看我的小程序,并建议在哪里以及如何限制用户在选择乘法表时输入任何小于2或大于12的数字?提前谢谢

import random
print ('Welcome to the multiplication game.')
print ('How well do you know your 2-12 multiplication tables?')
print ('Which times table would you like to use?')
#user selects the times table
flag = True
while flag:
number1 = (input('Select a number between 2-12 '))
if number1.isdigit():
print('You will be working on the ',number1, ' times tables')
number1 = int(number1) #changes input into integer(numerical) input
flag = False
else:
print(number1, ' is not a valid number. Please select a number between 2-12.')
#"for' loop sets question count to 20 / indent after 'for' loop
for num in range(0,20):
number2 = random.randint(2,12)
answer = number1 * number2
# user inputs their "guess"
#if input during int(input) causes ValueError, 'except ValueError' deals with
#the error
while True:
try:
guess = int(input(f'What is {number1} x {number2}? '))
except ValueError:
print('Sorry, I don't understand that')
continue
else:
break
# program compares 'guess' to 'answer'. If answer calls up 'ValueError', 'except ValueError'
#deals with error
print (f'What is {number1} x {number2}? ')
while guess != answer:
try:
guess = int(input(f'What is {number1} x {number2}? '))
except ValueError:
print('Sorry, I don't understand that')
if guess != answer:
print ('No, Try again')
print ("You got it!")
print ("That's it, good work!")

此语句:

if number1.isdigit():

可以变成

if number1.isdigit() and 2 <= int(number1) <= 12:

另一个答案使用嵌套的if语句,它确实有效。话虽如此,您通常希望尽可能避免额外的嵌套(使代码更难读取和/或重构(,并且通常希望避免重复代码(出于类似的原因(。这个答案避免了这两个问题。

在此处更改此代码段:

while flag:
number1 = (input('Select a number between 2-12 '))
if number1.isdigit():
if int(number) >= 2 and int(number) <= 12:
print('You will be working on the ',number1, ' times tables')
number1 = int(number1) #changes input into integer(numerical) input
flag = False
else:
print(number1, ' is not a number between 2 and 12. Please select a number between 2-12.')
else:
print(number1, ' is not a valid number. Please select a number between 2-12.')

所有这些都是检查数字是否小于或等于12且大于或等于2,如果不是,则循环返回,就像你儿子输入非数字输入一样。如果您想要更少的代码行,请使用BrokenBenchmarks答案。然而,这个告诉你做错了什么。

最新更新