0

我对 python 世界很陌生,尽管我已经用 php 做了很多事情......这是我的情况......

  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 并向用户显示总和的能力。

4

3 回答 3

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)
于 2013-01-04T08:37:18.743 回答
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)是软件设计的主要原则之一,它使代码更具可读性、可维护性、优雅且不易出错

于 2013-01-04T08:32:35.057 回答
0

尝试将所有功能合并为一个(我会说它使它更清洁),然后您可以添加Num1Num2打印结果。

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()
于 2013-01-04T08:15:28.870 回答