我知道这篇文章: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') #
`
但是它一直打印“只有低位字母”的行,而不仅仅是检查条件,然后打印“错误的输入消息”然后尝试在游戏开始之前再次输入...
我会更喜欢这个建议:)
答案 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)
好吧gameword
是hello
。现在,如果程序在['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()
,依此类推