我需要遍歷字典,根據串列從用戶輸入中分配鍵值。如果用戶從串列中輸入了除有效值之外的任何內容,則 else 陳述句或例外會捕獲它,并重新設定串列。然后我需要獲取這些值并將它們作為引數傳遞給類物件,例如:
Class Player(self, strength, dexterity, constitution, intelligence, wisdom, charisma)
self.strength = strength
...
我期望變數由值設定,但在函式結束時所有變數仍然為零。
def character_generator():
cls()
player_name = input(f"Please enter character name: ")
strength = 0
dexterity = 0
constitution = 0
intelligence = 0
wisdom = 0
charisma = 0
display_dict = {'Strength': strength,
'Dexterity': dexterity,
'Constitution': constitution,
'Intelligence': intelligence,
'Wisdom': wisdom,
'Charisma': charisma}
score_list = [15, 14, 13, 12, 10, 8]
while len(score_list):
for key in display_dict.keys():
cls()
print(score_list)
try:
score = int(input(f"Enter score to assign to {key}: "))
if score in score_list:
print(f"{key} = {score}")
display_dict[key] = score
score_list.remove(score)
else:
score_list = [15, 14, 13, 12, 10, 8] # re-set list
print(f"Valid scores are listed above.")
sleep(.5)
print(f"Starting over.")
sleep(.5)
break
except ValueError:
print(f"Invalid entry..")
score_list = [15, 14, 13, 12, 10, 8] # re-set list
sleep(.5)
print(f"Starting over.")
sleep(.5)
break
for key, value in display_dict.items():
print(key, ':', value)
print(strength)
print(dexterity)
print(constitution)
print(intelligence)
print(wisdom)
print(charisma)
uj5u.com熱心網友回復:
沒有什么可以更新這些區域變數,所以難怪它們沒有得到更新。
但是,您也不需要它們來做任何事情 - 只需將 dict 用作??您的單一事實來源,您甚至可以**將其放入您的 Character 建構式中。
def character_generator():
cls()
player_name = input(f"Please enter character name: ")
stats = {
"strength": 0,
"dexterity": 0,
"constitution": 0,
"intelligence": 0,
"wisdom": 0,
"charisma": 0,
}
score_list = [15, 14, 13, 12, 10, 8]
while len(score_list):
for key in stats:
human_key = key.capitalize()
cls()
print(score_list)
try:
score = int(input(f"Enter score to assign to {human_key}: "))
if score in score_list:
print(f"{key} = {score}")
stats[key] = score
score_list.remove(score)
else:
score_list = [15, 14, 13, 12, 10, 8] # re-set list
print(f"Valid scores are listed above.")
sleep(0.5)
print(f"Starting over.")
sleep(0.5)
break
except ValueError:
print(f"Invalid entry..")
score_list = [15, 14, 13, 12, 10, 8] # re-set list
sleep(0.5)
print(f"Starting over.")
sleep(0.5)
break
for key, value in stats.items():
print(key, ":", value)
player = Player(**stats)
此外,我會將您的代碼簡化為
def character_generator():
stats = {
'strength': 0,
'dexterity': 0,
'constitution': 0,
'intelligence': 0,
'wisdom': 0,
'charisma': 0,
}
score_list = [15, 14, 13, 12, 10, 8]
assert len(score_list) == len(stats) # So we haven't been silly
for key in stats:
human_key = key.capitalize()
while True:
try:
score = int(input(f"Enter score to assign to {human_key} (from {score_list}): "))
except ValueError:
print("Please enter a valid number.")
continue
if score in score_list:
print(f"{key} = {score}")
stats[key] = score
score_list.remove(score)
break
else:
print(f"Invalid score. Please try again.")
for key, value in stats.items():
print(key, ':', value)
player = Player(**stats)
您也可以將其重構為多個函式——想到一個較小的函式來提示有效輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512929.html
上一篇:定義的變數在mongoDB$where的函式中未定義
下一篇:用戶輸入太多,python例外
