如何获得"有效" /"无效"从构成输出的字母列表输出?

时间:2017-09-29 18:21:44

标签: python

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

输出应根据其中包含的字母显示该单词是否有效。

我在Python上相当新。我想知道输出是否有效当输入只能由字母" f"," r"," u",& #34; I"和" t"如果在输入中写入另一个字母,结果应该是无效的。所以任何单词水果的位移都是有效的,但如果输入是" tfruh"然后它应该显示无效,因为不需要的字母" h"。然而,并非所有字母都必须包含在内,因此输入可以是" fru"并且应该是有效的。另外如何找到无效字符的位置并打印出来?

3 个答案:

答案 0 :(得分:1)

您可以使用此代码:

fly= input("give me an input ")
mylist=["f","r","u","i","t"]

letter=0
for i in fly:
    if i in mylist:
        print("valid")
        letter +=1
    else:
        print("invalid")

对于输入中的每个字符,检查允许的字符列表是否包含它。

答案 1 :(得分:0)

您可以创建一个类似下面的函数来检查您的单词是否是有效单词(单词的每个字符都在您的列表中),并使用无效字符索引中断代码(解释添加为代码的注释) ):

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

示例运行

>>> check_validity("fruit")
Valid word: fruit
>>> check_validity("itf")
Valid word: itf
>>> check_validity("frugit")
invalid character 'g'' at index: 3

注意:我将字符串传递给这些函数,但是您传递input()返回的值(在您的情况下是fly变量)。

答案 2 :(得分:0)

测试字符是否有效的有效方法是使用一组有效字母。我们可以使用内置的enumerate函数同时获取单词中的字符及其位置。

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

如果不允许使用enumerate,则可以使用间接迭代,循环遍历range,并使用它来索引单词。并且你不需要对允许的字母使用集合,你可以只使用字符串或列表。

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

这绝对是一种编码方式的好方法!