<p>我建议使用检查每一行都在做什么,python有哪些工具</p>
<pre><code>def get_rev_srt(filename):
# This is a dict(), it is used to pair data 'key: value',
# the file contains a simple match of a string and a int.
# Dictionaries don't contain the same functions as the lists,
# they don't require to have the same data type for a key o value,
# adding a value is a simple as adding an equal such as data['key'] = value
# if 'key' already exists 'value' will be replaced
data = {
'Alex': 999
}
# On python version >3 a context call is used to make ease of use.
# 'open()' context is handled by 'with' and gives you the return value
# like a function will, but the scope is extended, this means that
# any value created inside 'with' is not going to be deleted and can be
# accessed by the following code
with open(filename, 'r') as file:
# It is possible to find how many lines it has but it is much
# more easy to doing a loop until it has no more and
# it has no impact on performance
while True:
# Here im piping outputs, tis means that you can chain the correct
# output into another function and get the return of the lastone
# variable <- rsplit() <- readline()
cnt = file.readline().rsplit(' ', 1)
# This one just breaks the loop if the next line is empty
if cnt == ['']:
break
# Using try is not recommended for every occasion, but,
# as before it is really easy to just doit and see if it
# has work than check each time
try:
# [4:] means 'get all the values as a new list starting
# from the index 4', negative values just wrap around
# then [0:-1] would mean 'get from the beginning up to
# the value before last one', and like before they
# can be chained and nested
num = int(cnt[1][0:-1])
name = cnt[0]
# This one is quite obvious, check if a element is
# in the dict, olso works with list and tuple variables
if name in data:
data[name] += num
else:
data[name] = num
# It is recommended to have an exception type but not required
except ValueError:
# The new thing here is .join(), works in inverse as split;
# supply a list or tuple to a string, .format() at the end of the file
print('Bad formatting "{0}"'.format(
''.join(cnt).replace('\n', ' %n'))
)
# Simple bubble sort, works by descanting one by one the biggest value
# from a srinkin list of values, a conversion to 2 list is required because
# dicts don't allow the use of index, only keys
d_keys = list(data.keys())
d_values = list(data.values())
# l1 is the value to swap with the biggest
# range() creates a list of increasing number
for l1 in range(len(d_keys) - 1):
# Clear the max value
mxi, mxn = 0, 0
# loop the remaining values and check with one
# is the biggest and save it
for l2 in range(l1, len(d_keys) - 1):
if d_values[l2] > mxn:
mxn = d_values[l2]
mxi = l2
# This just swaps 2 elements in parallel from bought lists
tmn, tmv = d_values[l1], d_keys[l1]
d_values[l1], d_keys[l1] = d_values[mxi], d_keys[mxi]
d_values[mxi], d_keys[mxi] = tmn, tmv
# And pairs up the list back to a dict, this isn't that common
# don't worrie about how this works
return dict(zip(d_keys, d_values))
# Some functions used can take multiple arguments and use them
# or change the behavior, functions have 2 special values,
# a list and a dict that grout all arguments an k arguments,
# they are described by the use of a * and not the name
def undefined_args(*args, **kwargs):
# this function returns a list of how many
# arguments they have
return len(args), len(kwargs)
# This condition is a guard, it is added to ensure that this file
# is been executed by this file, that just means that this is the
# execution origin
if __name__ == '__main__':
pp_d = get_rev_srt('debugging.txt')
# A tuple is a fast list, the drawback is
# that the values can not be changed, only read
names = tuple(pp_d.keys())
for i in range(3):
# .format() works similarly to join, its a function of a string
# and "renders" like jinja would do, {} means value goes here,
# {0} insert here the first argument and {0:<25} is insert the
# first argument and give a tabulation to meet the size
# depending on the version the syntax may varies, the most modern
# is with f'{names[i]}'
print('Doctor : {0:<25} {1:<5} reviews'.format(
names[i], pp_d[names[i]])
)
</code></pre>