Jump to content

Dicionários: declarações de keys a partir de outras estruturas de dados (mutáveis) de forma a automatizar, os valores zerados, aspas vazias, para simular o random de um dado


jonhhy

Recommended Posts

Bom dia membros do P@P,

 


Como se faz uma atribuição automática de todos os valores num dicionário a partir de uma tupla ou string?

Vou mostrar o todo o processo:
Inicialmente fiz assim, mas pensei poder automatizar etapas (para treinar):

from random import randint

plays = {'p1':'', 'p2':'', 'p3':'', 'p4':''}

plays['p1'] = randint(1,6)
plays['p2'] = randint(1,6)
plays['p3'] = randint(1,6)
plays['p4'] = randint(1,6)



print(plays)
{'p1': 4, 'p2': 0, 'p3': 6, 'p4': 0}

Contudo, encurtei as linhas assim:

gamer = ['p1','p2','p3','p4']
plays2 = dict()

for i in gamer:
#   plays2 += {i:''}
  plays2[i] = randint(1,6)
plays2
{'p1': 5, 'p2': 5, 'p3': 5, 'p4': 1}

Depois andei a ver algum código na net e gostaria de conseguir dividir em quatro (individualmente) o tuplo que tem a atribuição vazia ''

# Declaring a dictionary
d = {} 
  
# This is the list which we are 
# trying to use as a key to
# the dictionary
a =['p1','p2','p3','p4']
  
# # converting the list a to a string
# p = str(a)
# d[p]= ''
  
# converting the list a to a tuple
q = tuple(a) 
d[q]= ''
  
for key, value in d.items():
    print(key, ':', value)

print(d)
('p1', 'p2', 'p3', 'p4') :

{('p1', 'p2', 'p3', 'p4'): ''}


Grato pela atenção, cumprimentos

 

 jonhhy

Link to comment
Share on other sites

Fazes um ciclo pela estrutura e colocas o valor inicial em cada posição.

No teu último exemplo,

q = tuple(a) 
d[q]= ''

estás a fazer isso sem um ciclo uma vez que o teu dicionário só tem uma chave, que é um tuplo, daí não teres necessidade de recorrer a um ciclo.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Okay M6, estou a analisar outro exercício em que acho que vou precisar de o fazer:

# Desafio 093

Crie um programa que gerencie o aproveitamento de um **jogador de futebol**. 

O programa vai ler o **nome do jogador** e **quantas partidas** ele jogou. 

Depois vai ler a **quantidade de gols** feitos em **cada partida**.

No final, tudo isso será guardado em um **dicionário**, incluindo o **total de gols** feitos durante o campeonato.

 

soccerPlayer = {'nameSP': '','matches': '','totalGols': ''}

soccerPlayer['nameSP'] = str(input(' Say soccerPlayer name: ? '))
soccerPlayer['matches'] = int(input(' How many games soccer play: ? '))

totalGols = 0
match = {}

for i in range(0, soccerPlayer['matches']):
  soccerPlayer['matches'][i] = int(input(f'How many goals scored in game {i}: '))
  totalGols += soccerPlayer['game'][i] 

soccerPlayer['totalGols'] = totalGols 

vou criar um ciclo para match.... com o valor que está em soccerPlayer['matches'] e reestruturar a parte do ciclo

Link to comment
Share on other sites

Resolvi através de listas,

 

soccerPlayer = {'nameSP': '','matches': '','totalGols': ''}

soccerPlayer['nameSP'] = str(input(' Say soccerPlayer name: ? '))
soccerPlayer['matches'] = int(input(' How many games soccer play: ? '))

totalGols = 0
match = []#{}
for i in range(0, soccerPlayer['matches']):
  print(f'How many games soccer scored in game {i}')
  match.append(int(input('')))
  totalGols += match[i]
# for i in range(0, soccerPlayer['matches']):
#   match['matches'][i] = int(input(f'How many goals scored in game {i}: '))
#   totalGols += soccerPlayer['game'][i] 

soccerPlayer['totalGols'] = totalGols 
print(soccerPlayer)



obrigado pela atenção 🙂😉

Link to comment
Share on other sites

Bom dia P@P,

acabei por concretizar assim a proposta de solução ao problema:

# number of ...matches could obtained for len(goallist)



soccerPl = {'nameSP': '', 'goalsbyGame':[], 'totalGoals': '', 'numMatches': ''} # name by input, goalsbygame append list, totalGoals cyclecounter



soccerPl['nameSP'] = str(input(' Say soccerPlayer name? :  '))

soccerPl['numMatches'] = int(input(' Say number of matches played? : ')) # vai derivar o número de chaves antes assim, devia por num varíável isolada.., pois consegue ser obtida a partir do len() da lista

totalGoals = 0

for i in range(0, soccerPl['numMatches']):

  print(f'Number of goals scored in match {i} :')

  soccerPl['goalsbyGame'].append(int(input('')))

  totalGoals += soccerPl['goalsbyGame'][i]



soccerPl['totalGoals'] = totalGoals

print('-='*25)



print(soccerPl)

print(f"Name is [{soccerPl['nameSP']}]")

print(f"The scoring in games was: {soccerPl['goalsbyGame']}.")

print(f"Total goals in season until now is: {soccerPl['totalGoals']}.")

 

# Output
  
 Say soccerPlayer name? :  Jon
 Say number of matches played? : 4
Number of goals scored in match 0 :
3
Number of goals scored in match 1 :
0
Number of goals scored in match 2 :
1
Number of goals scored in match 3 :
2
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
{'nameSP': 'Jon', 'goalsbyGame': [3, 0, 1, 2], 'totalGoals': 6, 'numMatches': 4}
Name is [Jon]
The scoring in games was: [3, 0, 1, 2].
Total goals in season until now is: 6.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Jon plays 4 match.
=> In match 0, scored 3 goals.
=> In match 1, scored 0 goals.
=> In match 2, scored 1 goals.
=> In match 3, scored 2 goals.
Edited by jonhhy
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.