我正在处理的问题解释如下:
2.1)编写一个程序,要求用户输入颜色。 如果颜色为黑色或白色,则输出“颜色为黑色或白色”。 如果它以字母“k”后面的字母开头, 输出“颜色以字母”k“后面的字母开头 字母“。(可选:考虑大写和非大写 话。注意:Unix和Python中字母表的顺序 是:符号,数字,大写字母,小写字母。)
以下是作者的解决方案:
#!/usr/bin/env python
#
# guess a color
#
answer = raw_input ("Please enter a color: ")
if (answer == "black") or (answer == "white"):
print "The color was black or white."
elif answer >= "k":
print "The color starts with a letter that comes after \"k\" in the alphabet."
这是我对这个问题的回答:
#!usr/bin/env python
#
#This program asks the user to input a color
color = raw_input("Please, enter a color, any color.")
if (color == "black") or (color == "white"):
print "The color was black or white."
elif color[0] != "a" or "b" or "c" or "d" or "e" or "f" or "g" or "h" or "i" or "j" or "k":
print "The color starts with a letter that comes after 'k' in the alphabet."
else:
print "The color was niether black nor white."
我无法理解作者解决方案的工作原理,特别是用于识别“颜色是否以字母”k“后面的字母开头”。
Python如何使这项工作?
elif answer >= "k":
Python如何识别第一个字符,例如color [0]和超出k的字母范围?
答案 0 :(得分:2)
因为通常,Python序列(包括字符串)为其元素实现lexicographical ordering。因此,如果第一个元素0与元素1相同,则比较第一个元素
但请注意,您的解决方案是错误的。它被解析为(color[0] != "a") or "b" or "c" or "d" or "e" or "f" or "g" or "h" or "i" or "j" or "k"
,仅在color[0] == 'a'
时才为假。您正在寻找color[0] not in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j')
(您也不应该排除' k'),但使用>=
只是一个更清洁的事情。
答案 1 :(得分:0)
想想单词在字典中的排序方式。字典中以K或更晚开头的每个单词都将在" k"之后。在字典里。这是python定义的基础
answer >= "k"
如果答案是在" k"之后是真的。在字典中,这与以" k"开头相同。或稍后的信。
现在看起来根据描述你不想包含以K开头的单词。这表明作者的解决方案是巧妙的错误,因为它将包含以K开头的单词。
答案 2 :(得分:0)
您是否注意到按名称排序文件的结果?如果你对字符串进行排序,“k”出现在以“k”开头并且有其他字母(“k [az] +”)的任何字母之前,因此,任何字符串>= "k"
都以“k”开头或者后面。
答案 3 :(得分:0)
在Python中,您可以使用==,!=,<,>,< =和> =。运算符来比较两个字符串。
for answer >= "k":
将字符串字母进行比较。
回答[0]> =“k”[0]等所有指数直到得出结论