python个人练习(40-49)

10

#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”双击打开查看效果

#演示

杨辉三角生成器.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();
  }
}

#演示

guess_num_game.apk


#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"