Python 2.7 的用户输入功能存在问题,无法让这些输入与程序一起使用

问题描述 投票:0回答:4

虽然我已经用 php 做了很多工作,但我对 Python 世界还是很陌生......这是我的案例......

  1. 我正在使用 python 2.7 为我的小程序编写一些代码。
  2. 在该程序中,我需要接受 2 个用户输入,它们都是数字。
  3. 第一个数字不得大于11且不得小于0。
  4. 第二个不得大于 59 且不得小于 0。
  5. 所以首先,我必须检查两个用户输入是否有效,如果他们做错了,程序必须向他们发出警告并让他们重试。
  6. 最后,如果他们正确地输入了两个数字,我想添加这些数字并提示一条消息,例如“您的数字之和是......等等......等等......”。

这是我的代码:

def validNum1(Num1):
    if Num1 < 0:
        print "%s is not valid value. Try again." % Num1
        return 0
    elif Num1 > 11:
        print "%s is not valid value. Try again." % Num1
        return 0
    else:
        return 1

def getInput_Num1():
    while 1:
        Num1 = raw_input("Enter Num1 Value: ")
        if validNum1(int(Num1)):
            break
    print "You're right. %s is a valid Num1." % Num1
    return
def validNum2(Num2):
    if Num2 < 0:
        print "%s is not valid value. Try again." % Num2
        return 0
    elif Num2 > 59:
        print "%s is not valid value. Try again." % Num2
        return 0
    else:
        return 2
def getInput_Num2():
    while 2:
        Num2 = raw_input("Enter Num2 Value: ")
        if validNum2(int(Num2)):
             break
    print "You're right. %s is a valid Num2." % Num2
    return

if __name__ == '__main__':
    getInput_Num1()
    getInput_Num2()

所以现在我想你们已经知道需要填补什么了;但让我说得更清楚一些。我想添加到这个程序中的是能够添加 Num1 和 Num2 并向用户显示总和。

python python-2.7 user-input numerical-methods
4个回答
1
投票

我会尝试将其分解为两个接受参数的函数。这也意味着,您可以通过更改

limits
列表来更改限制数量及其值,从而使您的代码更加灵活。它还使用更干净的新样式字符串格式。

def validNum(num,limit):
    if 0< num <limit:
        print "{0} is a valid value.".format(str(num))
        return num
    print "{0} is not a valid value. Try again.".format(str(num))

def getInput(limits):
    results = []
    for limit in limits:
        while True:
            num = int(raw_input("Enter a numeric Value: "))            
            if validNum(num,limit):
                results.append(int(num))
                break   
    print 'The sum of chosen numbers is {0}'.format(str(sum(results)))

limits=[11,59]   
getInput(limits)

0
投票

尝试将所有功能合并为一个(我想说这会使它更清晰),然后您可以添加

Num1
Num2
并打印结果。

def getInput():
    while True:
        Num1 = raw_input('Enter Num1 Value: ')
        if Num1 in range(12):
            print 'You're right. %s is a valid Num1.' % Num1
            break
        print '%s is not valid value. Try again.' % Num1
    while True:
        Num2 = raw_input('Enter Num2 Value: ')
        if Num2 in range(60):
            print 'You're right. %s is a valid Num2.' % Num2
            break
        print '%s is not valid value. Try again.' % Num2
    print 'The sum of your numbers is %s.' % (Num1 + Num2)

if __name__ == '__main__':
    getInput()

但是,如果您不想更改太多代码,请更改第二个

getInput
函数,使其接受参数
Num1
,然后让第一个函数调用第二个函数,参数输入为
Num1
。然后编写第三个函数,它接受两个数字,将它们相加并打印结果。就像这样:

getInput_Num2(Num1)  #add this to end of `getInput_Num1` function

def getInput_Num2(Num1):  #add a `Num1` parameter to pass to the new function

addNums(Num1, Num2)  #call the new function at the end of `getInput_Num2`

def addNums(Num1, Num2):
    print 'The sum of your numbers is %s.' % (Num1 + Num2)
    #do whatever else you want to do

if __name__ == '__main__':
    getInput_Num1()

0
投票

我建议不要创建一个函数,而是将关注点分开:你想要输入(两次,有不同的提示),你想要验证,你想要相乘,你想要打印结果。对于后两者,由于其复杂性较低,因此不需要任何功能。对于前两个,创建函数并将它们重新用于 num1 和 num2

试试这个:

def is_valid_number(number_str):
    try:
        number = int(number_str)
    except ValueError:
        return False
    if number < 0 or number > 11:
        return False
    else:
        return True

def get_input_number(prompt):
    while True:
        num = raw_input(prompt)
        if is_valid_number(num):
            return int(num)
        else:
            print "%s is not a valid value. Try again." % num

if __name__ == '__main__':
    num1 = get_input_number("Enter Num1 Value: ")    
    num2 = get_input_number("Enter Num2 Value: ")
    print "%i + %i = %i" % (num1, num2, num1+num2)

主例程只有三行,每个方法都执行其名称所指示的功能,并且可以重用。

关注点分离(SoC)是软件设计的主要原则之一,它使代码更具可读性、可维护性、优雅性和不易出错


0
投票

对于任何其他可能正在寻找更具Python风格的方法(Python 3)的人,您可以尝试以下方法:

def valid_nums():
    """Check for validity of user inputs."""
    num_1, num_2 = get_input()
    if (0 <= num_1 <= 11) and (0 <= num_2 <= 59):
        sum_of_nums = num_1 + num_2
        return "\nThe sum of {0} and {1} is {2}.\n".format(num_1, num_2, sum_of_nums)
    else:
        return "\n{0} or {1} is out of range.\n".format(num_1, num_2)

def get_input():
    """Accept user input."""
    while True:
        try:
            num_1 = int(input("Enter a number between 0 and 11: "))
            num_2 = int(input("Enter a number between 0 and 59: "))
        except ValueError:
            print("\nOne or more of your entry is invalid. Please try again.\n")
            continue
        else:
            return num_1, num_2

# Main program loop.
while True:
    print(valid_nums())
© www.soinside.com 2019 - 2024. All rights reserved.