尝试在 for 循环中使用列表索引

我在解决这个问题时遇到了一些麻烦。我有一个具有random.randint(alpha_low,alpha_high). alpha_low和alpha_high是使用函数 转换为数字值的字母ord。然后我使用该函数将它们转回,chr以便获得一个随机字母,并将其附加到final_list.问题是我想要列表的一半大写,一半小写。但现在,由于某种原因,我的代码没有打印一半一半,尽管我指定我希望一半保持不变,一半保持不变.upper()。


import random

def alpha_list(num_values, alpha_low, alpha_high):

        

    final_list = []

    

    for letter in range(num_values):

        rando = (chr(random.randint(alpha_low, alpha_high)))

        final_list.append(rando)


    for i in range(len(final_list)):

        if final_list[i] > final_list[int((len(final_list)/2)-1)]:

            final_list[i] = final_list[i].upper()

        else:

            pass


    return final_list


user_input_number = eval(input('please type an EVEN amount of letters you want: '))


user_input_first_letter = ord(input('please type the first letter of the limits(lower case): '))


user_input_last_letter = ord(input('please type the last letter of the limits(lower case): '))


print(alpha_list(user_input_number, user_input_first_letter, user_input_last_letter))

我尝试将列表分成 2 个列表,并将该列表大写,然后再次组合列表,但我觉得这不是最好的方法。


肥皂起泡泡
浏览 117回答 5
5回答

函数式编程

考虑到有关用户输入评估的注意事项,您遇到的问题与代码有关:for i in range(len(final_list)):        if final_list[i] > final_list[int((len(final_list)/2)-1)]:            final_list[i] = final_list[i].upper()        else:            pass由于 Final_list 已经包含所有小写字母,因此您只需将列表的后半部分变为大写即可。以下语句完成此任务:final_list = final_list[0:len(final_list)//2] +               [x in final_list[len(final_list)//2:] x.upper()]

守着一只汪

Athrough的 ASCII 值Z是 65 到 90。要变为小写,您需要在该值上添加 32。您可以使用这些初始值(65 到 90)作为界限来确定字母,并在列表长度的中间添加 32:#!/usr/bin/env python3import randomdef build_list(length):    l = [''] * length    for i in range(length):        uc = 32 if i >= length // 2 else 0        l[i] = chr(random.randint(65, 90) + uc)    return lprint(build_list(10)) # ['L', 'M', 'Q', 'U', 'H', 'w', 'x', 'o', 'j', 'u']根据需要调整字母范围。

绝地无双

final_list = [item.upper() if idx > len(final_list) else item for idx, item in enumerate(final_list)]在这里,我们再次迭代列表,但使用enumerate给出每个元素的索引,我们可以使用它通过基于索引的条件构造新列表。使用地图的更简洁的方式:final_list[len(final_list//2):] = list(map(str.upper, final_list[len(final_list//2):]))这里我们只得到列表的一半,并将 str.upper 应用于该一半中的每个元素,并将新的一半分配给旧的一半。

阿波罗的战车

好吧,你可以一个人for loop来完成它。尝试一下,让我知道这是否适合您,或者您需要任何解释。代码:import randomfrom typing import Listdef alpha_list(letters: int,               start: int,               stop: int,               randomize: bool = True) -> List[str]:  """  Return list of evenly* distributed characters with mixed cases.  Args:    letters: Maximum number of characters required in the list.    start: Starting ordinal range.    stop: Stopping ordinal range.    randomize: Boolean to return random sequence.  Returns:    List of characters split in upper and lower cases.  """  chars = []  for idx in range(letters):    temp = (chr(random.randint(start, stop)))    chars.append(temp.upper() if idx % 2 else temp)  if randomize:    random.shuffle(chars)  return chars# Usage:number = int(input("Please enter even amount of characters you want: "))first = ord(input("Please type the first character of the limits in lowercase "                  "[ex: a]: "))last = ord(input("Please type the last character of the limits in lowercase "                 "[ex: z]: "))print(alpha_list(number, first, last))输出:>>> Please enter even amount of characters you want: 10>>> Please type the first character of the limits in lowercase [ex: a]: a>>> Please type the last character of the limits in lowercase [ex: z]: z['r', 'w', 'r', 'i', 'z', 'U', 'F', 'Z', 'H', 'F']

慕少森

您正在比较 Final_list 中的字母。您需要比较索引以将一半字母设置为大写。改变:if final_list[i] > final_list[int((len(final_list)/2)-1)]:到:if i > len(final_list)/2 - 1:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python