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))