black_v = []
red_v = []
green_v = []
yellow_v = []
blue_v = []
magenta_v = []
cyan_v = []
white_v = []
nums_8 = ['1', '2', '3', '4', '5', '6', '7', '8']
print("\n\u001b[31m\nEMEGENCY MEETING")
vote = input("\n\u001b[37mWho do you vote for?:\n[1] Black\n[2] Red\n[3] Green\n[4] Yellow\n[5] Blue\n[6] Magenta\n[7] Cyan\n[8] White\nEnter the number (1-8):>>> ")
while vote in nums_8:
if vote == '1':
black_v.append(1)
break
Мой вопрос заключается в том, чтобы вместо того, чтобы делать «оператор if» для каждого числа, есть ли способ, которым я могу просто что-то записать, и если пользователь введет «1», программа добавит 1 к «black_v», и если он введет «3», , программа добавляет 1 к 'green_v'. Скажите мне, как это сделать в Python 3.x, а не 2.
Используйте словарь: {"black": [], "red": [], ... }
и пусть они вводят имя вместо числа.
Ребята, подскажите тогда, как это сделать.
хорошо, но как мне его завершить? @Бармар
Вы можете попробовать это, когда вы можете поместить свой список в словарь Python, а его ключ - это числовое значение, введенное пользователем. Итак, что бы ни ввел пользователь, он получает список, соответствующий этому конкретному числу, а затем appends
его. Извините, список не был хорошей идеей... Я знал, что что-то не так, и я думал, что это словарь.
Взгляните на пример вывода, где при вводе 2
он добавит входные данные в список red_v
, поскольку это 2
, поэтому в словаре ключ 2
со значением списка red_v
будет append
вводом пользователя.
black_v = []
red_v = []
green_v = []
yellow_v = []
blue_v = []
magenta_v = []
cyan_v = []
white_v = []
nums_8 = ['1', '2', '3', '4', '5', '6', '7', '8']
vs = {
1:black_v,
2:red_v,
3:green_v,
4:yellow_v,
5:blue_v,
6:magenta_v,
7:cyan_v,
8:white_v
}
print("\n\u001b[31m\nEMEGENCY MEETING")
vote = input("\n\u001b[37mWho do you vote for?:\n[1] Black\n[2] Red\n[3] Green\n[4] Yellow\n[5] Blue\n[6] Magenta\n[7] Cyan\n[8] White\nEnter the number (1-8):>>> ")
vs[int(vote)].append(vote)
print("Output in red_v list")
print(vs[2])
'''
while vote in nums_8:
if vote == '1':
black_v.append(1)
break
'''
Выход:
[1] Black
[2] Red
[3] Green
[4] Yellow
[5] Blue
[6] Magenta
[7] Cyan
[8] White
Enter the number (1-8):>>> 2
Output in red_v list
['2']
Почему у вас list()
в начале списка?
Вы проголосовали за черный, но он добавился к красному из-за +1
@StackOffended, когда я ввожу 2, я получаю «[]» в качестве ответа, используя ваш код. Почему?>
Используйте словарь вместо отдельных переменных.
votes = {
"black": [],
"red": [],
"green": [],
"yellow": [],
"blue": [],
"magenta": [],
"cyan": [],
"white": []
}
print("\n\u001b[31m\nEMEGENCY MEETING")
while True:
vote = input("\n\u001b[37mWho do you vote for? (black, red, green, yellow, blue, magenta, cyan, white) >>> ")
if vote in votes:
votes[vote].append(1)
break
else:
Print("That's not a valid vote, try again")
Диктант должен соответствовать вводу. например: если пользователь вводит red
, оператор if не будет работать. Вам не кажется?
@ Абдулла, пожалуйста, измени код Бармара на if vote+'_v' in votes: votes[vote+'_v'].append(1)
. Это позаботится о _v
в словаре
Я забыл удалить все _v
, я обновил его.
Я бы сделал это так. Избегайте «жесткого кодирования», когда это возможно. Таким образом, вы также можете добавить еще несколько значений в labels
, и все будет работать как всегда (например, я добавил значение <skip>
).
labels = ['Black', 'Red', 'Green', 'Yellow', 'Blue', 'Magenta', 'Cyan', 'White', '<skip>']
num_to_labels = { str(num + 1):label for num, label in enumerate(labels)}
num_to_votes = { str(num + 1):0 for num, label in enumerate(labels)}
print('\n\u001b[31m\nEMERGENCY MEETING')
print('\n\u001b[37mWho do you vote for?:')
for num, label in num_to_labels:
print(f'[{num}] {label}')
vote = input(f'Enter the number (1-{len(labels)}):>>> :')
while not vote in num_to_votes.keys():
vote = input(f'Wrong number, repeat (1-{len(labels)}):>>> :')
num_to_votes[vote] += 1
colors = {"Black": [], "Red": [], "Green": [], "Yellow": [], "Blue": [], "Magenta": [], "Cyan": [], "White": []}
_map_of_colors = {num: color for num, color in enumerate(colors, start=1)}
# {1: 'Black', 2: 'Red', 3: 'Green', 4: 'Yellow', 5: 'Blue', 6: 'Magenta', 7: 'Cyan', 8: 'White'}
msg_colors_options = '\n'.join([f'[{key}] {color}' for key, color in _map_of_colors.items()])
# [1] Black
# [2] Red
# [3] Green
# [4] Yellow
# [5] Blue
# [6] Magenta
# [7] Cyan
# [8] White
# f-string only python3.6+
msg_input = f"""\u001b[31m
EMEGENCY MEETING
\u001b[37m
{msg_colors_options}
Enter the number (1-8):>>>"""
#
#
# EMEGENCY MEETING
#
# [1] Black
# [2] Red
# [3] Green
# [4] Yellow
# [5] Blue
# [6] Magenta
# [7] Cyan
# [8] White
# Enter the number (1-8) or 0 to exit:>>>
while True:
option = input(msg_input)
if not option.isalnum() or int(option) not in range(len(_map_of_colors)):
input(f"\u001b[31mValue {option} isn't valid.\u001b[37m\nPress <ENTER> to continue.")
continue
# cast int
option = int(option)
if option == 0:
# show values
print("Values: ", colors)
print("Goodbye!")
break
# get color name in map
color_name = _map_of_colors[option]
# get color array by name and append.
colors[color_name].append(option)
Попробуй это
candidates = [['black_v', 0],['red_v', 0],['green_v', 0], ['yellow_v', 0], ['blue_v', 0], ['magenta_v',0], ['cyan_v',0], ['white_v', 0]]
print("\n\u001b[31m\nEMEGENCY MEETING")
vote = input("\n\u001b[37mWho do you vote for?:\n[1] Black\n[2] Red\n[3] Green\n[4]
Yellow\n[5] Blue\n[6] Magenta\n[7] Cyan\n[8] White\nEnter the number (1-8):>>> ")
candidates[int(vote) - 1][1] += 1
Вход
EMEGENCY MEETING
Who do you vote for?:
[1] Black
[2] Red
[3] Green
[4] Yellow
[5] Blue
[6] Magenta
[7] Cyan
[8] White
Enter the number (1-8):>>> 1
Выход
print(candidates)
[['black_v', 1], ['red_v', 0], ['green_v', 0], ['yellow_v', 0], ['blue_v', 0], ['magenta_v', 0], ['cyan_v', 0], ['white_v', 0]]
Попробуйте использовать Make 2d list