【问题标题】:Checking user input via raw_input method通过 raw_input 方法检查用户输入
【发布时间】:2014-07-28 16:33:29
【问题描述】:

我正在尝试使用 raw_input 从用户那里获取输入,我想捕捉用户可能输入数字的情况。我一直在搜索抛出堆栈溢出和其他各种网站,但我没有遇到任何对我来说很有意义的东西。由于 raw_input 总是返回一个字符串,是否有可能捕获这样的实例?

class Employee(object):

    def __init__(self,name,pay_rate,hours):

        self.name = name
        self.pay_rate = pay_rate
        self.hours = ("mon","tues","wed","thursday","friday","saturday","sunday")

    def __str__(self):
        return self.name       

    @property
    def weekly_total(self):
        return sum(self.hours)

    @classmethod
    def from_input(cls):
        while True:
            try:
                name = raw_input("Enter new employee name\n")
            except ValueError:
                print("\n  This is a integer  ")
                continue           
            else:
                break
        while True:
            try:
                pay = input("Enter pay rate  ")
            except ValueError:
                print("You must enter a value  ")
                continue
            else:
                break
        while True:
            try:
                hours = input("Enter a tuple for days monday through sunday  ")
            except ValueError:
                print("use must enter a tuple with 7 integer values")
                continue
            else:
                break
        return cls(name,pay,hours)    

employee = Employee.from_input()
print str(employee)

【问题讨论】:

  • 您的意思是要确保用户在需要数字时输入数字,反之亦然?请注意,您不应该使用 input() - int(raw_input(...)) 更明确。
  • 反之亦然,但我也需要前者用于支付输入和小时元组输入。我想确保为名称输入一个字符串,然后确保为工资和小时输入浮点值。

标签: python python-2.7 input user-input


【解决方案1】:

我会将其拆分为单独的函数;有更简洁的方法可以做到这一点,但我已经使它们尽可能相似,以便您可以看到过程:

def get_int_input(prompt):
    while True:
        s = raw_input(prompt)
        try:
            i = int(s)
        except ValueError:
            print "Please enter an integer."
        else:
            return i

def get_non_int_input(prompt):
    while True:
        s = raw_input(prompt)
        try:
            i = int(s)
        except ValueError:
            return s
        else:
            print "Please don't enter an integer."

【讨论】:

  • 哦,我正在尝试类似的事情,我在正确的轨道上,我明白你在这里做了什么再次感谢。
  • 所以我可以编写两个类似的函数,然后在我的 from_input 方法中调用这些函数来进行检查?
  • 是的,完全正确。这减少了重复。
  • 我对如何处理 from_input 方法中的姓名、工资和小时数输入感到困惑,因为我有这两个新功能,我是否需要将其中的每一个都传递到我的新检查功能中为了让我的最终退货声明 cls(name,pay,hours) 正常工作?
  • 不清楚你在问什么。 from_input 应该只包含例如pay = get_int_input("Enter pay rate: ")for 循环用于每日时间,然后 return cls(...) 在末尾。调用子函数来获取输入,而不仅仅是检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多