def formatted_print(dictionary): d = {key:value for key, value in dictionary.items()} lst = sorted(d.items(), key=lambda item:item[1], reverse=True) for i in range(len(lst)): print("{0:10s}{1:>6.2f}".format(lst[i][0], lst[i][1])) def main(): d = {} sentinel = '' for line in iter(input, sentinel): line = line.split(',') d[line[0]] = float(line[1]) formatted_print(d) main()
时间: 2024-03-14 15:48:57 浏览: 113
这段代码是一个Python程序,实现了一个函数`formatted_print`,它接受一个字典作为输入,将字典中的键值对按照值的大小排序后,格式化输出每个键值对的键和值。该程序还定义了一个主函数`main`,通过循环读取输入行,并将输入的键值对存储到一个字典中,最后调用`formatted_print`函数将字典中的数据打印出来。
相关问题
优化代码 def align_annotations(formatted_sql): lines = formatted_sql.split('\n') fields = [] ass=[] comments = [] for line in lines: if line.strip(): line=line.replace('\t',' ') if line.lower().startswith(("where", "left", "on","from","and","group")): fields.append(line) ass.append('') comments.append('') elif ' as ' in line.lower() and '--' in line : parts=line.replace(' as ',' -- ').replace(' AS ',' -- ').split('--') fields.append(parts[0]) ass.append(parts[1]) comments.append(parts[2]) elif ' as ' in line.lower() and '--' not in line : parts=line.replace(' as ',' AS ').split(' AS ') fields.append(parts[0]) ass.append(parts[1]) comments.append('') elif ' as ' not in line.lower() and '--' in line : parts=line.split('--') fields.append(parts[0]) ass.append('') comments.append(parts[1]) else: fields.append(line) ass.append('') comments.append('') # 计算每列的最大长度 max_field_length = max(len(field.strip()) for field in fields if not field.lower().strip().startswith(("where", "left", "on","from","and","group","inner"))) max_as_s_length = max(len(as_s.strip()) for as_s in ass) # 格式化字段、字段类型和注释,并生成新的建表语句 formatted_lines = [] for field,as_s, comment in zip(fields,ass, comments): formatted_field = f"{field.strip()}".ljust(max_field_length) if as_s.strip(): formatted_as_s = f"AS {as_s.strip()}".ljust(max_as_s_length+3) else: formatted_as_s=''.ljust(max_as_s_length+3 ) if comment.strip(): formatted_comment = f"-- {comment}" else: formatted_comment='' formatted_line = f" {formatted_field} {formatted_as_s} {formatted_comment}" formatted_lines.append(formatted_line) formatted_select_statement = "\n".join(formatted_lines) return formatted_select_statement
这个函数的作用是将一个 SQL 查询语句中的字段、字段别名和注释对齐,并生成一个新的 SQL 查询语句。针对代码的优化建议如下:
1. 减少不必要的代码行数,比如可以将 `fields`、`ass` 和 `comments` 的初始化写在一行中,不需要每个变量单独占用一行。
2. 简化一些条件判断的逻辑,比如可以将 `line.strip()` 的结果直接作为判断条件,不需要再写一个 if 语句。
3. 使用列表推导式简化对 `fields`、`ass` 和 `comments` 列表的生成过程。
4. 将一些常量定义为函数参数或全局变量,比如 `'where', 'left', 'on', 'from', 'and', 'group', 'inner'` 这些字符串可以定义为全局变量或函数参数,方便维护和修改。
根据上述优化建议,可以得到下面的代码实现:
```python
def align_annotations(formatted_sql, keywords=None):
if not keywords:
keywords = {'where', 'left', 'on', 'from', 'and', 'group', 'inner'}
lines = formatted_sql.split('\n')
fields, ass, comments = [], [], []
for line in lines:
if line.strip():
line = line.replace('\t', ' ')
if any(line.lower().startswith(kw) for kw in keywords):
fields.append(line)
ass.append('')
comments.append('')
elif ' as ' in line.lower():
parts = line.split(' as ')
if '--' in parts[1]:
parts = parts[0], *parts[1].split('--')
fields.append(parts[0])
ass.append(parts[1])
comments.append(parts[2] if len(parts) > 2 else '')
elif '--' in line:
parts = line.split('--')
fields.append(parts[0])
ass.append('')
comments.append(parts[1])
else:
fields.append(line)
ass.append('')
comments.append('')
max_field_length = max(len(field.strip()) for field in fields if not any(field.lower().strip().startswith(kw) for kw in keywords))
max_as_s_length = max(len(as_s.strip()) for as_s in ass)
formatted_lines = [f' {f"{field.strip()}".ljust(max_field_length)} '
f'{f"AS {as_s.strip()}".ljust(max_as_s_length+3) if as_s.strip() else "".ljust(max_as_s_length+3)} '
f'{f"-- {comment}" if comment.strip() else ""}'
for field, as_s, comment in zip(fields, ass, comments)]
return "\n".join(formatted_lines)
```
这样的代码更加简洁和易于维护,同时也不会影响函数的功能。
ip = input('输入IP地址:') if ip.isdigit(): ip1=int(ip) # print("字符串中只包含数字") if ip1>4294967296: print('IP地址不合法') else: def ip2decimalism(ip): dec_value = 0 v_list = ip.split('.') v_list.reverse() t = 1 for v in v_list: dec_value += int(v) * t t = t * (2 ** 8) return dec_value def decimalism2ip(dec_value): ip = '' t = 2 ** 8 for _ in range(4): v = dec_value % t ip = '.' + str(v) + ip dec_value = dec_value // t ip = ip[1:] return ip if __name__ == '__main__': while(1): # ip = input() dec_value = ip2decimalism(ip) # print(dec_value) ip = decimalism2ip(dec_value) print('IP地址是:',ip) break else: ip_list = ip.split(".") ipgeshi=len(ip_list) if ipgeshi >3 and ipgeshi<5: for v in ip_list: v1=int(v) if v1>254: print('IP地址不合法') break else: for i in range(len(ip_list)): ele = bin(int(ip_list[i]))#得到 "0b11000000 0b10101000 0b1100 0b1001111" ip_list[i] = ele[2:]#把0b切掉 得到后面的二进制01内容 #ip_list[i]=ip_list[i].strip("0b")也可以去掉 if len(ip_list[i]) < 8:#补全到八位 strl = "0" * (8 - len(ip_list[i])) + ip_list[i] ip_list[i] = strl val = "".join(ip_list) print('十进制IP地址是:',int("0b"+val, base=2)) break else: print('IP地址不合法')添加窗口
以下是将输入 IP 地址转换为十进制或二进制 IP 地址的代码,结合了 Tkinter 创建的可视化界面:
```python
import tkinter as tk
def ip_conversion():
ip = entry.get()
if ip.isdigit():
ip1 = int(ip)
if ip1 > 4294967296:
result_label.config(text="IP地址不合法")
else:
decimal_ip = ip2decimalism(ip)
binary_ip = decimalism2binary(decimal_ip)
result_label.config(text="IP地址是:" + decimal_ip + "\n32位二进制IP地址是:" + binary_ip)
else:
ip_list = ip.split(".")
ipgeshi = len(ip_list)
if ipgeshi > 3 and ipgeshi < 5:
for v in ip_list:
v1 = int(v)
if v1 > 254:
result_label.config(text="IP地址不合法")
break
else:
for i in range(len(ip_list)):
ele = bin(int(ip_list[i]))
ip_list[i] = ele[2:]
if len(ip_list[i]) < 8:
strl = "0" * (8 - len(ip_list[i])) + ip_list[i]
ip_list[i] = strl
val = "".join(ip_list)
decimal_ip = str(int("0b" + val, base=2))
binary_ip = decimalism2binary(int(decimal_ip))
result_label.config(text="IP地址是:" + decimal_ip + "\n32位二进制IP地址是:" + binary_ip)
break
else:
result_label.config(text="IP地址不合法")
def ip2decimalism(ip):
dec_value = 0
v_list = ip.split('.')
v_list.reverse()
t = 1
for v in v_list:
dec_value += int(v) * t
t = t * (2 ** 8)
return str(dec_value)
def decimalism2binary(dec_value):
binary_ip = format(dec_value, '032b')
formatted_binary_ip = '.'.join([binary_ip[i:i+8] for i in range(0, 32, 8)])
return formatted_binary_ip
# 创建窗口
window = tk.Tk()
window.title("IP地址转换")
window.geometry("300x250")
# 创建输入框和按钮
entry = tk.Entry(window)
entry.pack(pady=10)
convert_button = tk.Button(window, text="转换", command=ip_conversion)
convert_button.pack()
# 创建结果标签
result_label = tk.Label(window, text="")
result_label.pack(pady=10)
# 运行窗口主循环
window.mainloop()
```
通过运行这段代码,你可以在窗口中输入一个 IP 地址,然后选择转换为十进制或二进制 IP 地址,并点击转换按钮。程序将会在窗口中显示转换结果,包括十进制 IP 地址和32位二进制 IP 地址。
阅读全文