当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
答案 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个名字时你想要发生什么。