检查输入是否包含名称 - python

时间:2016-05-01 15:08:10

标签: python python-3.x

当isName()函数运行时,它给出了错误'int object is iterable'。我真的不明白什么是错的。有任何想法吗?谢谢!

import sys

def ifName():
    ifNameList = userInput.split()
    for i in len(ifNameList):
        #Seeing if one word following another word both have their first letters in capital
        if ifNameList[i] and ifNameList[i+1].istitle():
            print("is that a dude/dudette?")

userInput = input("type something")

if " " in userInput:
    ifName()

我改变了

for i in len(ifNameList)):

for i in (range(len(ifNameList)))

现在它给了我这个错误'IndexError:list index超出范围

更新:  我通过改变

修复了每一个问题
for i in len(ifNameList):
            #Seeing if one word following another word both have their first letters in capital
            if ifNameList[i] and ifNameList[i+1].istitle():
                print("is that a dude/dudette?")

  for i in (range(len(ifNameList))):

        #Seeing if one word following another word both have their first letters in capital
        if i != 0:
            if ifNameList[i] and ifNameList[i-1].istitle():
                print("Is that a dude/dudette")
            else:
                print("That is not a dude/dudette")
        else:
           continue

2 个答案:

答案 0 :(得分:0)

首先,len方法返回一个整数。所以,

for i in len(ifNameList)):

循环遍历整数,因此错误' int对象不可迭代'

其次,

for i in (range(len(ifNameList)))

引发错误' IndexError:列表索引超出范围,这又是有效的,因为你有一个语句[i + 1]。

第一个循环取指数0(即' i')和1(即' i + 1')。但是第二个循环取了索引1(即' i')和2(即' i + 1')。

因此在循环列表的最后一个索引时会引发错误,然后它会尝试查找不存在的last-index + 1索引。

看看问题定义,似乎你想找到的输入词是否满足istitle()条件。

我会写下以下内容:

import sys

def ifName():
    ifNameList = userInput.split()
    non_title_names = []
    for each_name in ifNameList:
        #Seeing if one word following another word both have their first letters in capital
        if not each_name.istitle():
            non_title_names.append(each_name)
    if non_title_names:
        print("Not a dude/dudette?")
    else:
        print("is that a dude/dudette?")

userInput = input("type something:\t")

if " " in userInput:
    ifName()

答案 1 :(得分:0)

你正在做一个过于复杂的简单检查。这是使代码至少工作的一种方法:

import sys

def ifName(userInput):
    ifNameList = userInput.split()
    if len(ifNameList) != 2:
        print("Please enter two names", file=sys.stderr)

    elif ifNameList[0].istitle() and ifNameList[1].istitle():
        #Seeing if one word following another word both have their first letters in capital
        print("is that a dude/dudette?")
    else:
        print("Please capilalize your names", file=sys.stderr)

    # Return something?

userInput = input("type something")

if " " in userInput:
    ifName(userInput)

但需要考虑的一些事情。你的函数应该返回一些东西,现在它确实很少。

请注意,我将用户的输入作为参数传递给函数。我认为没有充分的理由在这里使用全球。

您需要用户将名称大写,为什么不使用str.capitalize()在程序中执行此操作?

您假设所有名称都有两个组件。你确定总是这样吗?

目前还不清楚当输入奇数个名字或至少不是2个名字时你想要发生什么。