用于循环查找字母程序

时间:2014-02-05 22:19:42

标签: python

这是我目前的代码:

message = input("Enter a message: ")
etimes = 0
print("Your message is",len(message),"characters long")

print("The most common letter in the english language, 'e', is ", end="")
for letter in message:
    if "e" or "E" in letter:
        etimes += 1

if "e" or "E" in message:
    print("in your message", etimes, "times")
else:
    print("is not in your message")

为什么如果您输入的message包含“e”,则输出声称它具有与消息一样多的“e”字符?我举个例子: 如果我输入消息“你好吗”它会回复: “你的信息长达11个字符 英语中最常见的字母“e”在你的留言中11次“

为什么不响应: “你的信息长达11个字符 英语中最常见的字母“e”在你的留言中有1次“

因为没有

for letter in message:
        if "e" or "E" in letter:
            etimes += 1

一次遍历“你好吗”一个元素(字符):

letter = "h"
letter = "o"
letter = "w"
letter = " "
letter = "a"
letter = "r"
letter = "e"
letter = " "
letter = "y"
letter = "o"
letter = "u"

如果以上情况属实,则letter = "e"应该是唯一的时间

if "e" or "E" in letter:

true,对吗?这意味着etimes应该只等于一个?

2 个答案:

答案 0 :(得分:3)

for letter in message:
    if "e" or "E" in letter:
        etimes += 1

将其更改为:

for letter in message:
    if letter.lower() == 'e':
        etimes += 1

您的代码失败,因为or语句未按您认为的那样被读取。

if "e" or "E" in letter:

由解释器读取(伪代码):

if 'e' exists OR if 'E' in letter:

or more pseudo code

if True or if 'E' in letter:

由于or的工作方式:

true or false = true  # what your logic was producing
true or true = true
false or false = false

要正确使用or,您必须每次都明确说明比较:

if "e" in letter or "E" in letter:

这就是为什么在比较字符串时如果大写不重要,'e'与'E'相同,就像在这种情况下一样,最好通过lower()或{将案例改为全部相同{1}}所以你不必比较那么多东西。

答案 1 :(得分:0)

问题出在

if "e" or "E" in letter:

条件实际上意味着("e") or ("E" in letter),这总是正确的,因为非空字符串在Python中被认为是真的,而<true> or <anything>是真的。

正确的条件是

if "e" in letter or "E" in letter

以下是Python reference的相关部分:

  

在布尔运算的上下文中,以及表达式时   在控制流语句中使用时,将解释以下值   as false:FalseNone,所有类型的数字零和空字符串   和容器(包括字符串,元组,列表,字典,集合   和frozensets)。所有其他值都被解释为真   ...
  表达式x or y首先评估 x ;如果 x 为真,则为其值   被退回;否则,将评估 y ,结果值为   返回。

or的定义有另一个结果:"e" or "E" in letter的结果实际上是"e",而不是True。但是"e"被解释为真,所以条件仍然满足。