循环内比较,同时保持价值

时间:2018-09-27 13:40:38

标签: python python-3.x

我正在尝试制作一个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的好方法是什么?

2 个答案:

答案 0 :(得分:1)

很少注意,while循环非常适合您不知道要循环多少次的情况。当您知道要循环多少个项目时,for循环非常有用。在这种情况下,我们要检查的单词数已知,因此使用for循环更有意义。这样,我们就无需输入任何信息告诉我们期望多少个单词。

您的代码也没有处理与句子相关的单词,因此您应该split()在空格处输入list,以便对其中的单词进行操作。 for循环可以遍历一个对我们有用的列表。

请注意,for循环也可以使用elseelse部分在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