【问题标题】:Returning wrong values of true/false in list在列表中返回错误的真/假值
【发布时间】:2021-11-11 16:27:07
【问题描述】:

问题

WRITE 一个代码,用于检查“N”个英文单词的列表是否可以仅使用键盘的一行来书写。如果是这种情况,请制作一个包含“真”或“假”选项的列表。

输入:

第一行必须读取'N'的值。 第二行往下读“N”字

例子:如果 N = 3 那么英文单词列表是 [POTTER, EQUITY, LIRIL] 那么输出是 [True, True, False]

我的代码

N=int(input("enter number of elements: "))
words=input("enter the words separated by a space: ")
wl=words.split()
print("list of words is" , wl)
l2=[]
final=[]
a=['q','w','e','r','t','y','u','i','o','p']
if N<0:
    print("Invalid Input")
else:
    for i in range(0,N):
        ele=wl[i]
        l2.append(ele)
        new=ele.split()
        if new <=a:
            re1='True'
            final.append(re1)
        else:
            re2='False'
            final.append(re2)
    print(final)

最终列表显示真实,即使使用了键盘其他行的字母。谁能指出我的错误在哪里并帮助我修复此代码?

【问题讨论】:

  • new &lt;= a 是一个奇怪的比较。想想看。但是一个问题:你的键盘不止一排,对吧?这段代码只看一个...还要考虑大小写字母的比较...
  • 其中有多个问题,很难说出你认为事情会发生什么,这就是为什么很难说出你是如何犯错误的。例如,在定义new 之后添加print(new)split 会按照你的想法做吗?另一个问题,正如 trincot 已经指出的那样:你认为new &lt;= a 比较什么以及如何比较?此时newa 是什么?
  • 你很有可能。可以在问题陈述中清楚地说明rule。甚至我们可以看看我们的键盘并弄清楚这一点! ;-)
  • 另外请注意'True''False'TrueFalse 不同。具有讽刺意味的是,'False' 是一个始终计算为 True 的字符串。
  • @DanielHao 我完全误读了这个问题,因为“'N'个英文单词的列表只能用键盘的第一行写出来”,后来才意识到????

标签: python list for-loop set tuples


【解决方案1】:

你的键盘上有 3 行字母

row1="QWERTYUIOP"
row2="ASDFGHJKL"
row3="ZXCVBNM"

尽管第三行不会产生任何单词,因为它没有元音,但您仍然需要检查第二行是否有 GLAD、FLAG、HALL 等单词。

对于每个单独的单词,如果它的所有字母都在同一行上,则可以将其写在一行上:

if all(letter in row1 for letter in word) \
or all(letter in row1 for letter in word):

有了这个,您应该能够通过遍历单词列表来填充您的最终结果(无需担心索引)。

for word in wl:
    if all(letter in row1 for letter in word.upper()) \
    or all(letter in row2 for letter in word.upper()):
       final.append(True)
    else:
       final.append(False)
    

【讨论】:

  • N=int(input("enter number of elements: ")) 987654325 final=[] 987654327 words=input("").upper() 987654329 row1="QWERTYUIOP" 987654331 row3="ZXCVBNM" 987654333 print("Invalid input") 987654335 @`为i的范围( len(l1)):`ele=str(l1[i])if all(letter in row1 for letter in ele) or all(letter in row2 for letter in ele) or all(letter in row3 for letter in ele):final.append(True)else:final.append(False)print(final)
  • 这就是我最终的结果。它有效,但我仍然不明白如何在没有索引的情况下做到这一点?
  • 您最初使用words.split() 来获取单词列表(wl),这是正确的,所以我没有在我的帖子中重复它。这很容易创建一个列表,您可以使用 for 循环对其进行迭代。由于 split() 会将单词分开,因此您无需向用户询问多个单词(可能不一致)。
  • 为了避免使用索引,您只需让 for 循环遍历单词列表 (for word in wl:) 中的项目,而不是遍历必须应用的一系列索引在名单上(for i in range(len(wl)): word=wl[i] ...
  • 如果您需要先询问多个单词,您应该在循环中逐个输入单词并在输入最终列表时处理每个单词:for _ in range(NumberOfWords):word = input("enter a single word:") ... for 循环中的_ 用于忽略迭代次数,因为您只对重复您的过程感兴趣(而不是索引值)。
猜你喜欢
  • 2014-08-08
  • 2013-06-14
  • 2021-10-15
  • 2013-05-29
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2014-09-07
相关资源
最近更新 更多