根据列表测试列表

时间:2014-03-03 23:57:47

标签: python python-3.2

我知道这篇文章:Testing user input against a list in python

但是,作为新人(这里和编程),我不确定是否有一个3岁的帖子是好的,或者我是否需要制作一个新帖子。我为此道歉。

我也检查了文档,但是在阅读之后我没有完全理解,为什么这段代码在运行后不会打印“不在选择中”的行。

我想这样做,以便针对列表“选择”测试用户输入。 (假设用户仅在a到z之间输入低限)

我尝试过像'a'或'test'这样的输入,但是“不在选择中”仍会打印输出,就好像它无法识别输入一样。

有人可以帮我这个吗?我正在尝试制作一个刽子手游戏:)

selection = list('abcdefghijklmnopqrstuvwxyz')
gameword = []

user_input = input('input a gameword> ') 
gameword = list(user_input) 
if gameword not in selection:
    print('not in selection')

编辑++

我意识到我需要所有这些:“islower,isalpha,isdigit

问题是,我似乎无法将所有这些结合起来并仍然使其发挥作用。或者想出一个更合适的方式来做到这一点。

在我意识到我需要将它们全部组合之前,这是我最终得到的结果:

while True:                                      # loop to get the user input
user_input = input('input> ')                    # store input in 'user_input'
gameword = list(user_input)                      # list inside gameword
if user_input == 'q':                            # loop ends when q is entered
    break                                        # break statement
if len(user_input) <= 4 or len(user_input) >= 9: # checks the length of the string input 
    print('5 to 8 letters ')                     # prints the restriction on screen
for i in gameword:                               #
    if i.islower() not in selection              # checks if lowercase are used
        print('only low letters please')         # prints the restriction on screen
for i in gameword:                               #
    if i.isalpha() not in selection:             # check if is alphabet letter are used
        print('only letters')                    # prints the restriction onscreen
for i in gameword:                               #
    if i.isdigit() in selection:                 # checks if digits are in word list
        print('no numbers plz')                  #

`

但是它一直打印“只有低位字母”的行,而不仅仅是检查条件,然后打印“错误的输入消息”然后尝试在游戏开始之前再次输入...

我会更喜欢这个建议:)

7 个答案:

答案 0 :(得分:4)

selection包含一系列字符:['a', 'b', ..., 'z']

gameword是用户输入内容的列表。如果用户输入a,则gameword['a']

然后您询问gameword是否在selection中,即selection是否包含['a']。但它不包含'a',字符,而不是['a'],其中包含一个元素的列表。

我猜你想让用户只输入下一个猜字母?试试这个:

selection = list('abcdefghijklmnopqrstuvwxyz')
next_letter = input('input a letter> ') 
if len(next_letter) != 1:
    print('Not a letter')
elif next_letter not in selection:
    print('not in selection')

答案 1 :(得分:2)

好吧gamewordhello。现在,如果程序在['h', 'e', 'l', 'l', 'o']中搜索列表abcdefghijklmnopqrstuvwxyz,则不会找到它,因为整个单词不是整体存在的。您可能希望更改代码:

selection = list('abcdefghijklmnopqrstuvwxyz')
gameword = []

user_input = input('input a gameword> ') 
gameword = list(user_input) 
for k in gameword:
    if k.lower() not in selection:
        print('not in selection') 

您正在检查整个列表是否在选择中,而不是。解决此问题的方法是使用for循环遍历selection中的每个字符,而不是同时循环每个字符。

编辑:以下是第二组代码,回答了您的第二个问题:

selection = list('abcdefghijklmnopqrstuvwxyz')
gameword = []

user_input = input('input a gameword> ')
user_input = str(user_input)
gameword = list(user_input)
for k in gameword:
    if k.isdigit() == True:
        print('no digits please')
        break
    if k.isalpha() == False:
        print('only alphabets please')
        break
    if k.islower() == False:
        print('only lowercase please')
        break
    if k not in selection:
        print('not in selection')
        break

我希望我理解你的要求是正确的:D

答案 2 :(得分:2)

听起来你想要验证user_input字符串只包含字母字符(a-z)。为此,您可以使用isalpha()字符串方法。

if not gameword.isalpha():
    print("Not all alphabetical characters")

要检查字符串是否全部是小写,您还可以使用string.islower()方法。

if not gameword.islower():
    print("Not all lower case characters")

要将字符串转换为全部小写,可以使用string.lower()方法。

答案 3 :(得分:2)

尝试使用类似的东西。

words = 'abcdefghijklmnopqrstuvwxyz'

guess = raw_input('input a gameword> ')
if guess not in words:
    print('not in selection')

答案 4 :(得分:1)

您似乎在一个项目列表中搜索字符串。 对于这种类型的游戏,我会使用一个元组,因为每个输入都是唯一的。

selection = ('a','b','c','d')
gameword = []
....... //input game words
for word in gameword:
    if word not in selection:
        print('not in selection')

答案 5 :(得分:1)

你说你正在建立一个刽子手游戏,所以你想检查userinput是否是一个有效的英文单词?如果是这样,那么这将无效。您需要下载一个单词表。有大量的开源资源可供使用。

将文本文件保存为主页文件夹中的“words.txt”。然后,你可以这样做,

>>>s=set(i for i in open('words.txt'))
>>>userinput=input('Enter your word')
>>>if userinput not in s:
        print('Not a valid word')

这是您可以尝试的一个link

答案 6 :(得分:1)

请求输入,然后使用一堆if...else语句来检查islower(), isalpha(),依此类推