Python 如何获得;“有效”/&引用;“无效”;将构成输出的字母列表的输出?
输出应根据包含的字母显示单词是否有效Python 如何获得;“有效”/&引用;“无效”;将构成输出的字母列表的输出?,python,Python,输出应根据包含的字母显示单词是否有效 我对Python相当陌生。我想知道当输入只能由字母“f”、“r”、“u”、“I”和“t”组成时,输出是否有效,如果在输入中写入了另一个字母,则结果应无效。因此,单词FROUT的任何位移都是有效的,但如果输入为“tfruh”,则由于不需要的字母“h”,它应显示为无效。但是,并非所有字母都必须包含在内,因此输入可以是“fru”,并且应该是有效的。另外,如何找到无效字符的位置并打印它?您可以使用以下代码: fly= input("give me an input"
我对Python相当陌生。我想知道当输入只能由字母“f”、“r”、“u”、“I”和“t”组成时,输出是否有效,如果在输入中写入了另一个字母,则结果应无效。因此,单词FROUT的任何位移都是有效的,但如果输入为“tfruh”,则由于不需要的字母“h”,它应显示为无效。但是,并非所有字母都必须包含在内,因此输入可以是“fru”,并且应该是有效的。另外,如何找到无效字符的位置并打印它?您可以使用以下代码:
fly= input("give me an input")
list=["f","r","u","i","t"]
letter=0
for i in list:
if i==(fly(letter)):
print("valid")
letter +=1
else:
print("invalid")
对于输入中的每个字符,检查允许的字符列表是否包含该字符 您可以创建如下函数来检查您的单词是否为有效单词(单词的每个字符都在您的列表中),并使用无效字符索引(解释添加为代码注释)来中断代码: 样本运行:
def check_validity(word):
my_list = ["f", "r", "u", "i", "t"]
# ^ don't use `list` as variable name as it is an in-built data type
# `enumerate` allows to iterate the list returning the index as well
for i, c in enumerate(word):
# check character of your string is not in your list
if c not in my_list:
print("invalid character '{}'' at index: {}".format(c, i))
break # break loop if condition satisfies
else:
print("Valid word: {}".format(word))
注意:我正在将字符串传递给这些函数,但是您可以在这里传递
input()
返回的值(在您的例子中是fly
变量)。测试字符是否有效的有效方法是使用一组有效字母。我们可以使用内置的枚举
函数同时获取单词中的字符及其位置
>>> check_validity("fruit")
Valid word: fruit
>>> check_validity("itf")
Valid word: itf
>>> check_validity("frugit")
invalid character 'g'' at index: 3
输出
allowed = set('fruit')
words = ('fitur', 'iursfgt', 'ffrruuiitt', 'FRUIT')
for word in words:
print(word)
valid = True
for i, c in enumerate(word):
if c not in allowed:
print('Bad char', c, 'at position', i)
valid = False
if valid:
print(word, 'is valid\n')
else:
print(word, 'is invalid\n')
如果不允许使用
枚举
,可以使用间接迭代,通过在范围
上循环,并使用该范围索引到单词中。您不需要为允许的字母使用集合,只需使用字符串或列表即可
fitur
fitur is valid
iursfgt
Bad char s at position 3
Bad char g at position 5
iursfgt is invalid
ffrruuiitt
ffrruuiitt is valid
FRUIT
Bad char F at position 0
Bad char R at position 1
Bad char U at position 2
Bad char I at position 3
Bad char T at position 4
FRUIT is invalid
此代码生成与早期版本相同的输出
为了好玩,这里有一个几乎不可读的版本
这绝对不是编写代码的好方法 请为您的问题添加实际代码,而不是图像。它将帮助其他SO社区成员阅读和运行该程序,他们将能够更有效地帮助您,而不会浪费太多时间。非常感谢您这是我的第一篇帖子,下次我会更加小心!)<代码>飞行(字母)没有多大意义。如果
fly
是一个函数,那么它将调用该函数,将字母作为参数传递给它。但是在您的代码中,fly
是input
函数返回的字符串的名称。顺便说一句,您不应该使用list
作为变量名,因为这会隐藏内置的list
类型。我可以在不使用enumarate函数的情况下,仅使用for循环和if语句来查找无效字母的位置吗?所以输出应该是这样的:“X(位置2)不是一个有效的字母。”顺便说一句,非常感谢您提供的解决方案,我们肯定也会尝试@卷心菜55是的,你可以不用enumerate
来做,但是替代品没有那么干净<代码>枚举是一个非常重要的内置函数,因此学习如何使用它是一个好主意。当然,如果这是一项家庭作业,你不能使用枚举
,那就不同了例如,您可以对范围内的i(len(word))执行,而不是枚举
等。但是在Python中,使用带有范围的for
循环对字符串进行迭代被认为是不好的风格。这种方式效率较低,而且往往会使代码更混乱,更难阅读。我对您的函数进行了一段时间的研究,试图为其添加一些功能,但失败了:(例如,函数给出了不属于列表的第一个错误字母,我希望它对每个字母进行迭代,表示“位置4处的“h”无效”并且应该对下一个无效字母执行相同的操作,因此我设置I=0,然后添加+1,但这只会增加第一个无效字母的值。您能告诉我如何实现此功能吗?@Cabbage55您的意思是您的函数应该打印所有无效字符吗?如果是,则只需删除break
状态从我共享的功能中删除
fitur
fitur is valid
iursfgt
Bad char s at position 3
Bad char g at position 5
iursfgt is invalid
ffrruuiitt
ffrruuiitt is valid
FRUIT
Bad char F at position 0
Bad char R at position 1
Bad char U at position 2
Bad char I at position 3
Bad char T at position 4
FRUIT is invalid
allowed = 'fruit'
words = ('fitur', 'iursfgt', 'ffrruuiitt', 'FRUIT')
for word in words:
print(word)
valid = True
for i in range(len(word)):
c = word[i]
if c not in allowed:
print('Bad char', c, 'at position', i)
valid = False
if valid:
print(word, 'is valid\n')
else:
print(word, 'is invalid\n')
allowed = set('fruit')
words = ('fitur', 'iursfgt', 'ffrruuiitt', 'FRUIT')
for word in words:
a = [word]
a.extend(f'Bad char {c} at position {i}' for i, c in enumerate(word)
if c not in allowed)
a.append(f"{word} is {('in', '')[not a]}valid\n")
print('\n'.join(a))