我正在尝试制作一个Python程序,
1.比较单词的第一个字母和最后一个字母
2.判断输入到程序中的单词是否按字母顺序
例如)阿拉斯加猴面包树凯迪拉克=>将通过 例如)阿拉斯加猴面包树greg =>无法通过
我的代码如下所示
num_words = int(input())
while num_words > 0:
my_word = str(input())
num_words -= 1
alphabet_order = ord(my_word[0].lower())
if my_word[0].lower() != my_word[-1].lower() or alphabet_order != ord(my_word[0].lower()):
print(my_word)
break
alphabet_order += 1
if alphabet_order == ord('z') + 1:
alphabet_order = ord('a')
else:
print('no mistake')
大家好!
我对编程还很陌生,我开始发现在循环中分配变量非常麻烦。
似乎每次循环接受新输入时,我的变量Alphabet_order都会不断更新。
在每次循环仅更新ord(my_word[0])
时,稳定地将Alphabet_order变量增加1的好方法是什么?
答案 0 :(得分:1)
很少注意,while
循环非常适合您不知道要循环多少次的情况。当您知道要循环多少个项目时,for
循环非常有用。在这种情况下,我们要检查的单词数已知,因此使用for
循环更有意义。这样,我们就无需输入任何信息告诉我们期望多少个单词。
您的代码也没有处理与句子相关的单词,因此您应该split()
在空格处输入list
,以便对其中的单词进行操作。 for
循环可以遍历一个对我们有用的列表。
请注意,for
循环也可以使用else
,else
部分在for
循环完成之后运行,它循环遍历了所有元素,我们知道如果for
完成列表中的所有单词,然后将插入else
部分。如果我们中断,则else
将不会运行。
其余的或多或少都拥有它,只需要开始ord('a')
就可以使生活更轻松。
my_word = input() #take a sentence such as alaska baobab cadillac
current_ord = ord('a')
for each in my_word.split(' '):
if each[0].lower() != each[-1].lower() or current_ord != ord(each[0].lower()):
print(f"bad word {each}")
break
current_ord += 1
if current_ord == ord('z') + 1:
current_ord = ord('a')
else:
print('no mistake')
答案 1 :(得分:0)
也许这对您有帮助。与其在循环内部进行初始化,不如在循环外部进行声明并根据条件进行不同的分配。
提示:拥有while num_words > 0
是多余的,因为当它碰到0
时会自动终止,因为它被视为False
。无需将int
转换为str
类型,因为默认情况下为str
。
num_words = int(input("Enter a number"))
alphabet_order = None
while num_words:
my_word = input("Enter a word")
num_words -= 1
if alphabet_order is None: # happens only once
alphabet_order = ord(my_word[0].lower())
if ord(my_word[0].lower()) >= alphabet_order:
print('ok')
alphabet_order = ord(my_word[0].lower()) # update alphabet_order
else:
print('not ok EXITING')
break # closing loop