Além do que já foi respondido acima, tem mais algumas coisas:
input
já retorna uma string, então fazer str(input(...))
é redundante e desnecessário. Use apenas input(...)
que já terá a string.
Em vez de copiar o dicionário todas as vezes, você pode criar um novo dicionário dentro do while
- na prática o efeito é o “mesmo”, mas criar cópias esconde algumas armadilhas (no seu caso não acontece, mas o simples fato de poder acontecer já sugere que talvez seja melhor não criar cópias e sim um novo dicionário).
E se quer que a comparação seja case insensitive, pode converter o retorno de input
para minúscula, usando lower()
. Tem um pequeno detalhe em fazer if resp in 'sS'
: se a pessoa digitar “sS”, também entra neste if
. É um pequeno detalhe, mas que pode comprometer a usabilidade.
Resumindo, ficaria assim:
# a lista é de pacientes, não de prioridades
pacientes = list()
while True:
# cria um novo dicionário, pois no fundo é isso que vc quer (não quero uma "cópia", pois cada paciente é independente dos outros)
# nome no singular, pois o dicionário só tem os dados de um único paciente
paciente = dict()
paciente['nome'] = input('Nome: ')
paciente['idade'] = input('Idade do(a) Paciente: ')
paciente['doenca'] = input('Qual é a doença? ')
paciente['gravidade'] = input('Qual é a gravidade? ')
pacientes.append(paciente) # não precisa copiar
# transforma em minúscula (e nem precisa da variável na verdade)
if input('Receber análise de prioridade? [S/N]').lower() == 's':
break
print('Os pacientes com prioridade alta são: ')
for p in pacientes:
if p['gravidade'] == 'Alta':
print(f'- {p["nome"]}')
Outra opção é criar o dicionário no próprio append
, assim:
while True:
nome = input('Nome: ')
idade = input('Idade do(a) Paciente: ')
doenca = input('Qual é a doença? ')
gravidade = input('Qual é a gravidade? ')
pacientes.append({
'nome': nome, 'idade': idade, 'doenca': doenca, 'gravidade': gravidade
})
# transforma em minúscula (e nem precisa da variável na verdade)
if input('Receber análise de prioridade? [S/N]').lower() == 's':
break
Ou, ainda:
while True:
pacientes.append({
'nome': input('Nome: '),
'idade': input('Idade do(a) Paciente: '),
'doenca': input('Qual é a doença? '),
'gravidade': input('Qual é a gravidade? ')
})
# transforma em minúscula (e nem precisa da variável na verdade)
if input('Receber análise de prioridade? [S/N]').lower() == 's':
break