【问题标题】:How to check if user input is in lower or uppercase yet still print out an answer如何检查用户输入是小写还是大写但仍打印出答案
【发布时间】:2014-03-17 23:27:28
【问题描述】:

我真的只是开始使用 python 编程,并且我有一个响应某些用户输入的小程序。我想拥有它,这样当您输入大写的内容时,它在代码中是否大写并不重要。这是我到目前为止写的代码。

我无法添加图片,因为我没有足够的代表,但我想我可以解释一下。

这就是我目前拥有的代码

循环并响应特定的用户输入

import random

BOO = ("Aghh!", "That wasn't just a fart!", "Oh, I was soo scared", "I am so terrified       right now", "Where did you spring from?!", "If this was any more scary it would be R  rated!")

x = ""
print "I am a simple computer program designed to respond to certain inputs from a user"

x = raw_input("Input: ")
while not(x == "exit" or x == "Exit"):

    if x == "Oli" or x== "oli" or x == 'Oliver' or x == 'oliver':
        print "Its the creator!"

    elif x == "hi" or x == "hello" or x == "Hi" or x == "Hello":
        print "Hi!"

    elif x == "how are you?" or x == "how are you":
        print "Fine thanks!"


    elif x == "boo!" or x == "boo" or x == "BOO!" or x == "Boo":
        print random.choice(BOO)

    elif x == "You are actually awesome":
        print "Aww, Thanks!"

    else:
        print "Hello, " + x
    x = raw_input("Input: ")

例如:在用户输入单词“boo”的第 21 行,我必须为世界的不同大小写添加一个 or 语句。有没有办法让代码检查大小写并仍然打印相同的输出(或随机输出) 我已经检查了stackoverflow,但我找不到我的问题的答案。谢谢。

【问题讨论】:

  • 你为什么要发布图片?贴出代码!看看docs.python.org/2/library/stdtypes.html#string-methods
  • 您决定是在程序中处理大写还是小写,然后将所有用户输入转换为您决定的任何内容。
  • 以防万一,x in ['hi', hello'] 看起来好多了。当然还有.lower(),如下所述

标签: python input capitalization


【解决方案1】:

如果我理解正确,您希望用户输入任何大写字母 或分别小写,这样您就不必每次都检查大小写。

所以你可以在接受用户输入后使用上层函数或下层函数:

userInput = raw_input("Insert text").upper()

userInput = raw_input("Insert text").lower()

如果你只是想测试输入是大写还是小写,你可以导入 string 模块并使用 string.ascii_lowercase 或 string.ascii_uppercase。

import string

userInput = raw_input("Insert text")

print userInput in string.ascii_lowercase
print userInput in string.ascii_uppercase

希望有所帮助 :) 亚历克斯

编辑:没错,我相信我现在明白了!您的问题是,例如对于输入 BOO,您不确定用户是否会键入 Boo 或 BOO 或 boo,因此您必须检查用户输入的所有可能大写。这基本上是我之前试图解释的内容!

你能做的就是像这样抓住用户的输入:

userInput = raw_input("Insert Text").lower()

现在,无论用户输入单词 BOO 的大小写(Boo、BOo、boo、BOO 等...),变量 userInput 在所有这些情况下都将包含boo,因为我们总是将用户的输入小写。因此,无需检查用户的输入是 boo 或 BOO 还是 Boo,您只需检查它是否等于 boo 即可继续!

如果您也想接受感叹号,那么您还需要为此添加另一个检查!

希望对您有所帮助!

【讨论】:

  • 嗨,亚历克斯,感谢您提供的信息。我刚刚在问题中添加了我的代码,我有点明白你想说什么,但我需要更多解释
  • 更多解释 - 好吧,如果你分两步走,也许会更容易掌握:(1)user_input = raw_input("Input: ")(2)input_lower = user_input.lower()然后你可以比较input_lower和just测试字符串的小写版本。您不再需要关心用户使用的外壳。您甚至不必为小写输入添加新变量:user_input = user_input.lower()。或者,正如 Alex 建议的那样,您可以同时获取用户输入和小写:user_input = raw_input("Input: ").lower()
  • 也许方法链让你感到困惑。您可以在字符串上调用.lower(),对吗?例如。 greeting = "HI" 然后greeting.lower() 返回 hi(不修改greeting 本身)。 (你甚至不需要变量:'HI'.lower() 也返回 hi,尽管用字符串字面量这样做很少有用。)无论如何,raw_input("Input: ") 返回一个字符串,对吧?因此,您可以在该返回值上调用 .lower(),而不必先将其放入变量中。然后该方法调用链的返回值就是链中最后一个调用返回的字符串。
  • 是的,现在我了解爱德华了,谢谢!这将极大地帮助我尝试编写的代码。我只是不明白 .lower() 在做什么。
  • 不是必需的,但很挑剔:在这种情况下,最好使用 .casefold 而不是 .lower。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2015-04-23
  • 2011-09-15
  • 2018-06-17
  • 2012-01-03
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多