python个人练习(40-49)
#40.温度转换
#输入
while True:
try:
a = int(input("摄氏度请输入1,华氏度请输入2:"))
if a == 1:
b = float(input("请输入摄氏度温度:"))
c = b * 1.8 + 32
print(f"摄氏度温度是{b},转换为华氏度温度是{c}")
elif a == 2:
b = float(input("请输入华氏度温度:"))
c = (b-32)/1.8
print(f"华氏度温度是{b},转换为摄氏度温度是{c}")
except ValueError:
print("请输入有效的数!")
#输出
# 摄氏度请输入1,华氏度请输入2:1
# 请输入摄氏度温度:37
# 摄氏度温度是37.0,转换为华氏度温度是98.60000000000001
# 摄氏度请输入1,华氏度请输入2:2
# 请输入华氏度温度:101
# 华氏度温度是101.0,转换为摄氏度温度是38.333333333333336
# 摄氏度请输入1,华氏度请输入2:3
# 摄氏度请输入1,华氏度请输入2:,
# 请输入有效的数!
# 摄氏度请输入1,华氏度请输入2:1
# 请输入摄氏度温度:,
# 请输入有效的数!
#41-43.按位与、或、异或
#输入
a = bin(23)[2:].zfill(8)
b = bin(17)[2:].zfill(8)
c = bin(23 & 17)[2:].zfill(8)
d = bin(23 | 17)[2:].zfill(8)
e = bin(23 ^ 17)[2:].zfill(8)
print(f'23 的二进制: {a}')
print(f'17 的二进制: {b}')
print(f'23 & 17 的结果: {c}')
print(f'23 | 17 的结果: {d}')
print(f'23 ^ 17 的结果: {e}')
#输出
# 23 的二进制: 00010111
# 17 的二进制: 00010001
# 23 & 17 的结果: 00010001
# 23 | 17 的结果: 00010111
# 23 ^ 17 的结果: 00000110
#44.按位取反
#输入
print(23)
print(~23)
#输出
# 23
# -24
#45.计算字符串长度
#输入
a = input()
print(len(a))
#输出
# 237hjkds fskf
# 13
#46.杨辉三角生成器
#输入
import tkinter as tk
from tkinter import ttk
# 生成杨辉三角
def generate_pascal_triangle(n):
triangle = []
for row in range(n):
current_row = [1] * (row + 1)
for i in range(1, row):
current_row[i] = triangle[row - 1][i - 1] + triangle[row - 1][i]
triangle.append(current_row)
return triangle
# 实时更新显示
def update_display(*args):
n = current_level.get()
triangle = generate_pascal_triangle(n)
result_text.delete("1.0", tk.END)
# 居中显示每一行
for row in triangle:
formatted_row = ' '.join(map(str, row))
result_text.tag_configure("center", justify='center')
result_text.insert(tk.END, f"{formatted_row}\n", "center")
# 增加层数
def increase_level():
current = current_level.get()
if current < 15:
current_level.set(current + 1)
# 减少层数
def decrease_level():
current = current_level.get()
if current > 1:
current_level.set(current - 1)
# 创建主窗口
root = tk.Tk()
root.title("杨辉三角生成器")
root.geometry("700x600")
root.configure(bg="#e6f2ff") # 浅蓝色背景
# 标题标签
title_label = tk.Label(root, text="杨辉三角(1-15层)",
font=("Arial", 18, "bold"), bg="#e6f2ff", fg="#333")
title_label.pack(pady=15)
# 层数控制区域
control_frame = tk.Frame(root, bg="#e6f2ff")
control_frame.pack()
# 减少按钮
minus_button = tk.Button(control_frame, text="-", width=3, font=("Arial", 14), command=decrease_level,
bg="#ff9999", fg="white", relief="flat")
minus_button.pack(side=tk.LEFT, padx=5)
# 当前层数显示
current_level = tk.IntVar(value=1)
level_label = tk.Label(control_frame, textvariable=current_level, font=("Arial", 16), width=3,
bg="white", relief="solid")
level_label.pack(side=tk.LEFT)
# 增加按钮
plus_button = tk.Button(control_frame, text="+", width=3, font=("Arial", 14), command=increase_level,
bg="#66bb6a", fg="white", relief="flat")
plus_button.pack(side=tk.LEFT, padx=5)
# 结果展示区域(带滚动条)
result_frame = tk.Frame(root)
result_frame.pack(pady=20, fill=tk.BOTH, expand=True)
scrollbar = tk.Scrollbar(result_frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
result_text = tk.Text(result_frame, wrap=tk.NONE, font=("Courier New", 14), bd=0, relief=tk.FLAT,
yscrollcommand=scrollbar.set, bg="#ffffff", padx=20, pady=20, height=15)
result_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.config(command=result_text.yview)
# 绑定层数变化事件
current_level.trace_add("write", update_display)
# 初始化显示
update_display()
# 启动主循环
root.mainloop()
#打包成exe步骤
#1.在vscode创建的python虚拟环境中新建终端,依次执行以下命令
pip install pyinstaller
pyinstaller --onefile --windowed 文件名.py
#2.在同目录的dist文件夹下找到“文件名.exe”双击打开查看效果
#演示
#47.查找字符串
#输入
a = "hello python"
b = "python"
c = "python!"
print(a.find(b))
print(a[a.find(b):])
print(a.find(c))
print(a[a.find(c):])
#输出
# 6
# python
# -1
# n
#48.猜数字游戏
#修改main.dart为以下代码
import 'dart:math';
import 'package:flutter/material.dart';
void main() => runApp(GuessNumberGame());
class GuessNumberGame extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '猜数字游戏',
theme: ThemeData(primarySwatch: Colors.blue),
home: GameHomePage(),
);
}
}
class GameHomePage extends StatefulWidget {
@override
_GameHomePageState createState() => _GameHomePageState();
}
class _GameHomePageState extends State<GameHomePage> {
late int target;
late int attempts;
late int maxAttempts;
late String message;
late TextEditingController inputController;
@override
void initState() {
super.initState();
_resetGame(); // 初始化游戏
}
void _resetGame() {
setState(() {
target = Random().nextInt(99) + 1;
attempts = 0;
maxAttempts = 7;
message = "欢迎来到猜数字游戏!你有7次机会猜1到99之间的数字。";
inputController = TextEditingController();
});
}
void checkGuess(String input) {
int guess;
try {
guess = int.parse(input);
} catch (e) {
setState(() {
message = "请输入有效的整数!";
});
return;
}
if (guess < 1 || guess > 99) {
setState(() {
message = "请输入1到99之间的数字。";
});
return;
}
attempts++;
if (guess < target) {
setState(() {
message = "太小了!";
});
} else if (guess > target) {
setState(() {
message = "太大了!";
});
} else {
setState(() {
message = "恭喜你,猜对了!正在开始新一局...";
});
Future.delayed(Duration(seconds: 2), () {
_resetGame(); // 延迟2秒后开始新游戏
});
}
if (attempts >= maxAttempts) {
setState(() {
message = "很遗憾,你没有在$maxAttempts次机会内猜中。正确答案是 $target。正在开始新一局...";
});
Future.delayed(Duration(seconds: 2), () {
_resetGame(); // 延迟2秒后开始新游戏
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("猜数字游戏")),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(message, style: TextStyle(fontSize: 18)),
SizedBox(height: 20),
TextField(
controller: inputController,
keyboardType: TextInputType.number,
decoration: InputDecoration(labelText: "输入你的猜测"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => checkGuess(inputController.text),
child: Text("提交猜测"),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: _resetGame,
child: Text("重新开始"),
style: ElevatedButton.styleFrom(primary: Colors.red),
),
],
),
),
);
}
@override
void dispose() {
inputController.dispose();
super.dispose();
}
}
#演示
#49.第一次只出现一次的字符
#输入
while True:
a = input("请输入一串字符串:")
b = -1
d = dict()
for i in a:
if i in d:
d[i] += 1
else:
d[i] = 1
for j in range(len(a)):
if d[a[j]] == 1:
b = a[j]
break
if b == -1:
print("字符串中没有第一次且只出现一次的字符")
else:
print(f'字符串中第一次且只出现一次的字符是:"{b}"')
#输出
# 请输入一串字符串:dwejkewlo
# 字符串中第一次且只出现一次的字符是:"d"
# 请输入一串字符串:fsewer
# 字符串中第一次且只出现一次的字符是:"f"
# 请输入一串字符串: fwejke
# 字符串中第一次且只出现一次的字符是:" "
# 请输入一串字符串:rfwwerfe
# 字符串中没有第一次且只出现一次的字符
# 请输入一串字符串:,,daew
# 字符串中第一次且只出现一次的字符是:"d"